`

Objective-C开发——NSLog()和@”字符串”

阅读更多

使用#import导入了Foundation框架的主头文件后,就可以开始利用Cocoa特性编写代码了。Hello Objective-C中的第一行实际代码使用了NSLog()代码,如下所示:

NSLog(@”hello , Objective-C !”);

此代码可向控制台输出”hello , Objective-C !”。如果你使用过C语言,那么一定遇到过printf(),而NSLog()这个Cocoa函数的作用和printf()很相似。

和Printf()一样,NSLog()接受一个字符串作为其第一个参数,该字符串可包含格式说明符(如%d)。此函数还可以接受匹配格式说明符的其他参数,printf()可在打印之前将这些参数插入到作为第一个参数的字符串中。

Objective-C只是增加了一点“特殊调料”的C语言,所以可以用printf()代替NSLog()。但我们建议使用NSLog(),因为它添加了特性,例如世界戳、日期戳和自动附加换行符(’\n’)等。

你也许需不太理解函数名NSLog()。这里的“NS”是什么意思?其实,Cocoa对其所有函数、常量和类型名称都添加了“NS”前缀。这个前缀告诉你函数来自Cocoa而不是其他工具包。

两个不同食物使用相同表示服时会导致名称冲突,而前缀可以预防这个大问题。如果Cocoa将此寒食命名为Log(),那么这个名称很可能和一些程序员创建的Log()函数冲突。当包含Log()的程序和Cocoa一起创建时,Xcode会警告Log()被多次定义,将产生糟糕的结果。

前缀为何是“NS”而不是“Cocoa”?“NS”前缀的来历要追随至此工具包还被称为NextSTEP,而且是NeXT software公司(前NeXT公司,于1996年被苹果公司收购)产品的时候,但品故宫公司没有破坏为NextSTEP便携的代码的兼容性,继续使用“NS”前缀,由此可见,“NS”是历史遗存了。

Cocoa已占用了“NS”前缀,所以很明显,不应该再为自建的变量或函数名称添加前缀“NS”。否则处理代码的阅读器会发生混乱,它们会认为你创建的内容实际上属于Cocoa。同样,假如将来苹果公司为Cocoa添加了一个函数,碰巧和你创建的名称相同,那么你的代码可能会出现问题。由于没有集中管理的前缀注册表,所以可以任意选择前缀。很多人使用他们的姓名首字母或公司名称作为前缀,为了使我们的例子更简单,本书中不为代码添加前缀。

看下面NSLog()语句:

NSLog(@”Hello , Objective-C !”);

你是否注意到了字符串前的@符号?这是Objective-C在标准C语言基础上添加的特性之一。双引号中的字符串前有一个@符号,这表示引用的字符串应该作为Cocoa的NSString元素来处理。

什么是NSString元素?去掉“NS”前缀后,就可以看到熟悉的术语“String”。你已经知道字符串就是一串字符,所以你一定能猜到NSString就是Cocoa中的一串字符。

NSString元素有许多打包的特性,Cocoa在需要字符串时可随时使用它们。下面是一些NSString功能。

告知其长度;

将自身与其他字符串比较;

将自身转换为整型值或浮点值。

还有许多功能是使用C风格字符串无法实现的。

 

观察这些字符串

一个易犯的错误是将C风格字符串(而不是专门的NSString的@“字符串”元素)传递给MSLog(),如果是这样,编译器会给出警告:

main.m:46: warning:passing arg 1 of ‘NSlog’ fromincompatible pointer type

如果要运行这个程序,它可能会崩溃,要捕捉这样的问题,可以让Xcode总是将警报作为错误来处理,方法是,选择Xcode Groups & Files列表顶端的项目,选择File—Get Info命令,选择Build选项卡,在搜索区输入“error”,然后勾选Treat Warnings

as Error复选框。

分享到:
评论

相关推荐

    Objective-C基础教程 中文 PDF 清晰版 [31M]

    2.2.2 NSLog()和@"字符串"8 2.3 布尔类型10 2.3.1 BOOL强大的实用功能11 2.3.2 比较13 2.4 小结14 第3章 面向对象编程基础知识15 3.1 间接15 3.1.1 变量与间接16 3.1.2 使用文件名的间接18 3.2 在面向对象...

    [Objective-c程序设计].杨正洪等.扫描版

    《Objective-C程序设计》(作者杨正洪、郑齐心、李建国)通过大量的实例系统地介绍了Objective-C语言的基本概念、语法规则、框架、类库及开发环境。读者在阅读本书后,可以掌握Objective-C语言的基本内容,并进行...

    ios-YBPickerTool 选择器工具.zip

    一句代码快速集成UIPickerView 使用block回调 [YBPickerTool show:@[@[@"测试数据---1", @"测试数据---2", @"测试数据---3", @"测试数据---4", @"测试数据---5", @"测试数据---6"]... NSLog(@"%@", indexPath); }];

    Objective-C2.0程序设计

    第15章 数字、字符串和集合 15.1 数字对象 15.2 字符串对象 15.2.1 NSLog函数 15.2.2 可变对象与不可变对象 15.2.3 可变字符串 15.2.4 所有对象到哪里去了 15.3 数组对象 15.4 同步AddressCard方法 15.4.1 快速枚举 ...

    Objective-C矩阵库YCMatrix.zip

    YCMatrix 是使用 Objective-C 编写的灵活矩阵库,支持 Swift。YCMatrix 通过 Accelerate Framework 连接BLAS,LAPACK 和 vDSP 函数。YCMatrix 支持 OS X (10.7 ) 和 iOS (8.0 )。代码示例:@include YCMatrix; ...

    Object C语言教程及案例.docx

    我注意到您提到的是 Objective-C 语言,这是一种主要用于 macOS 和 iOS 开发的编程语言。下面是一个简要的 Objective-C 语言教程和一个基本的案例。 ### Objective-C 语言教程: #### 1. Hello World 程序 ```...

    Objective-c对象组装XML

    [map setObject:@"c" forKey:@"content"]; 或者 NSMutableArray *list = [[NSMutableArray alloc]init]; NSMutableDictionary *map1 = [[NSMutableDictionary alloc]init]; [map1 setObject:@"a1" forKey:@...

    objective-c的基本知识

    类别(Category) Category是ObjC语言中的扩展机制之一,另一个为Protocol。 Category提供一种为某个类添加方法而又不必编写子类的途径。 假设有这样一个类CarInfo: ... NSLog(@"Car brand: Golf"); } @end

    Objective-C文字多行输出方法一

    Objective-C中使用多条NSLog语句来实现分行输出

    equivalent:Objective-C 和 Swift 的等价物

    Swift 鼓励很多开发者考虑 Cocoa 和 Cocoa Touch 开发,但绝大多数资源仍然是用 Objective-C 编写的。 这个页面总结了两种语言中的许多常见模式,让开发人员更容易阅读 Objective-C 代码来编写 Swift 代码(反之亦然...

    Objective-C基础api

    OC数组不可以存储基本数据类型: 有序、可以重复 // 1. 数组创建 NSArray* array= [NSArray arrayWithObjects:@110,@120, nil]; NSLog(@--%@,array); NSLog(@count==%lu,[array... NSLog(@count==%@, [array obje

    Objective-C中NSLog输出格式大全

    主要介绍了Objective-C中NSLog输出格式的相关资料,非常的简单,有需要的小伙伴可以参考下。

    DMTime:Objective-C中的简单代码计时器

    一个简单的用于计时代码的Objective-C计时器 用法 #import ... [DMTime startTimer:@"Some key"]; // Some long running process DMTimeResult *result = [DMTime endTimer:@"Some key"]; NSLog(@"Code took %f ...

    Objective-C的函数响应式编程框架ReactiveObjC.zip

    ReactiveObjC (前身是 ReactiveCocoa 或者 RAC) 是一个 Objective-C 框架,实现了函数响应式编程模式。最简单的例子:// When self.username changes, logs the new name to the console. // // ...

    AutomaticCoder.zip

    Automatic Coder 可根据 JSON 字符串自动生成对应的 Objective-C 处理代码。 示例代码: NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://zxapi.sinaapp.com"]]; NSData *...

    Object-c 语法快速入门

    ”字符串”是C的字符串,@”"是把C的字符串转成NSString的一个简写. 在需要NSString的地方才需要这个转化,例如NSLog里面. 在需要C string的地方,还是用”字符串”的. 另外,@”"这个转换是不支持中文的.例如NSLog(@”...

    NSString与C字符串之间的相互转换

    代码: [cpp] const char *cString = “这是一个C字符串, c string”; NSString *nsstring = @”这是个NSString字符串, nsstring”; NSLog(@”cString字符串–>%s “,cString); NSLog(@”NSString字符串–>%@”,...

    Async.OC:Objective-C中的语法糖,用于Grand Central Dispatch中的异步调度

    异步OC 用Objective-C重写 。 要获得对iOS 7和OS X 10.9的支持,请查看 。 异步糖看起来像这样: Async.background(^{ NSLog ( @" A: This is run on the background " );}).main(^{ NSLog ( @" B: This is run on ...

Global site tag (gtag.js) - Google Analytics