《iOS Programming》 读书笔记 Day1

来源:互联网 发布:mac双系统快速切换 编辑:程序博客网 时间:2024/06/05 00:29

OC方法签名

  • OC和其他语言不同, Objective-C 中,方法的唯一性取决于方法名。因此,即使参数类型或返回类型不同, 一个类也不能有两个名称相同的方法。

OC释放对象

- 将指向对象的变量设置为 nil,可以要求程序释放该对象,代码如下: partyInstance = nil;这行代码会释放 partyInstance 变量所指向的对象

Nil会自动忽略发送给自己的消息

- 与Java等语言不同,OC中给nil发送消息的时候,不会产生异常,而是这条指令会被自动忽略。因此在执行对象的方法的时候不必检查是否对象为空

OC是单继承的语言

- 每个类都有一个且只有一个父类(superclass)并继承其父类的行为

OC的格式字符串

- Objective-C 的格式字符串基本和 C 语言相同。但是 Objective-C 支持一种额外的转换说明: %@,对应的实参类型是指向任何一种对象的指针。

访问器的编写

现在看来,似乎只有访问器才能使用点操作,还有不带参数的方法

  • 在 Objective-C 中,存方法的命名规则为英文单词 set 加上要修改的实例变量的变量名(首 字母大写)。以 itemName 为例,其存方法的方法名是 setItemName:。在其他语言中,取方 法的方法名通常会是 getItemName。但在
    Objective-C 中,取方法的方法名就是实例变量的变 量名。Cocoa Touch
    库中的部分代码会假定读者所编写的类也遵守这样的约定。因此,有着良 好代码风格的 Cocoa Touch 程序员都会遵守这个约定。

#import#include的区别

- 在 Objective-C 中,存方法的命名规则为英文单词 set 加上要修改的实例变量的变量名(首 字母大写)。以 itemName 为例,其存方法的方法名是 setItemName:。在其他语言中,取方 法的方法名通常会是 getItemName。但在 Objective-C 中,取方法的方法名就是实例变量的变 量名。Cocoa Touch 库中的部分代码会假定读者所编写的类也遵守这样的约定。因此,有着良 好代码风格的 Cocoa Touch 程序员都会遵守这个约定。

instancetype

两个初始化方法的返回类型都是 instancetype。该关键字表示方法的返回类型和调用方 法的对象类型相同。init
方法的返回类型都声明为 instancetype。 为什么不将返回类型声明为 BNRItem *?问题在于,BNRItem
的子类会继承其全部方法, 其中包括初始化方法和其返回类型。如果 BNRItem 的子类对象收到该初始化消息,那么返回
的会是什么类型的对象?答案是相应子类的对象,而不是 BNRItem 对象。读者可能会想:“这
个问题容易解决,在子类中覆盖初始化方法并修改返回类型即可”。但是,在 Objective-C 中,
一个对象不能同时拥有两个选择器相同、但是返回类型(或者参数类型)不同的方法。 为了避免这个问题,可以声明 init
方法的返回类型和调用方法的对象类型相同,这样就 保证了对象初始化后仍然是正确的类型。

id

在 Objective-C 引入 instancetype 关键字之前,初始化方法的返回类型都是 id(读音 “eye-dee”)。id 的定义是“指向任意对象的指针”(id 和 C 语言的 void* 类似)。使用 Xcode 创建类文件时,模板代码中仍然使用 id 作为初始化方法的返回类型,我们希望 Apple 能尽快 更新模板代码。
instancetype 只能用来表示方法返回类型,但是 id 还可以用来表示变量和方法参数的 类型。如果程序运行时无法确定一个对象的类型,就可以将该对象声明为 id。
id objectOfUnknownType;
可以使用 id 快速遍历存储不同类型对象的数组:

for (id item in items) {   NSLog(@"%@", item);}
0 0
原创粉丝点击