`

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培训资料

    Objective-C是一种面向对象的编程语言,它是在标准C的基础上发展起来的,主要用于苹果公司的Mac OS X和iOS操作系统上的应用程序开发。Objective-C不仅继承了C语言的基础特性,还引入了许多面向对象的概念和技术,如...

    解锁Objective-C的KVC:深入Key-Value Coding的奥妙

    本文将深入探讨Objective-C中的一个核心概念——Key-Value Coding(KVC),并详细讲解其原理和实际应用。 #### 1. KVC简介 KVC是一种通过字符串键来访问和修改对象属性的技术。它允许开发者以一种更加动态的方式与...

    Object-C 入门教程-object-c如何学习

    `:使用`NSLog`函数输出字符串。 #### 四、消息传递机制 Objective-C最显著的特点之一是其源自Smalltalk的消息传递机制。在Objective-C中,对象之间的交互是通过消息传递来完成的。这种机制与C++等语言中严格的方法...

    objective c 开源代码

    1. 解析(Parsing):将JSON格式的字符串转换为 Objective-C 对象(如 NSArray 和 NSDictionary)。 2. 序列化(Serialization):将Objective-C对象转换回JSON格式的字符串。 使用 TouchJSON 可以非常方便地进行...

    iphone生命周期 详解

    在深入探讨iPhone的生命周期之前,我们先简要回顾一下Objective-C中字符串处理的相关知识,这部分内容虽然不直接涉及iPhone的生命周期,但能够帮助更好地理解iOS开发的基础知识,进而为深入理解iPhone的生命周期奠定...

    iphone 相关文档

    `#import`指令用于包含头文件,这里是Foundation框架,它提供了许多基本的类和功能,如字符串处理和集合类。 `main`函数是每个C或Objective-C程序的起点。`argc`和`argv`参数分别表示命令行参数的数量和数组,但在...

    试读样章 第三章

    下面的示例展示了如何创建一个字符串数组: ```objective-c NSArray *listOfLetters = [NSArray arrayWithObjects:@"A", @"B", @"C", nil]; ``` 在使用`arrayWithObjects:`创建数组时,需要传递使用逗号分隔的对象...

    工厂模式demo(iphone程序)

    `createEnemyWithType:` 方法根据传入的字符串来决定创建哪个子类的实例。 在iPhone程序中,这样的设计模式可以带来很多好处。例如,它可以简化客户端代码,因为创建敌人的逻辑已经被封装到工厂类中。同时,如果...

    详解iOS开发中app的归档以及偏好设置的存储方式

    这两种方法都是Objective-C语言实现的,并且在实际开发中被广泛使用。 首先,我们来了解一下简单的数据存储方式——偏好设置。偏好设置,也称为NSUserDefaults,是用于存储应用设置信息的一种便捷方法。所有的偏好...

    苹果游戏编程

    Objective-C(简称OC)是苹果公司在C语言基础上扩展的一种面向对象的编程语言,广泛应用于iOS和OS X平台的应用开发。OC具有以下特点: 1. **语言特性**: - **封装**:OC在C语言的基础上增加了面向对象的特性,...

Global site tag (gtag.js) - Google Analytics