第二章 对象、消息、运行期
2016-06-10 17:02:15 0 举报
AI智能生成
Effective Objective-C 2.0 读书笔记
作者其他创作
大纲/内容
第二章 对象、消息、运行期
6.理解“属性”这一概念
原子性
nonatomic
效率高
atomic
默认
读写
readwrite
readonly
set
assign
简单赋值
基础数据类型和C数据类型
NSInteger、CGFloat
int,float,double,char
不更改引用计数
retain
引用计数加1
copy
建立引用计数=1的对象,释放旧对象
不保留新值
内存管理
strong
拥有关系
设置新值时,先保留新值,释放旧值,再设置新值,类似retain
weak
非拥有关系
设置新值时,不保留新值,不释放旧值,类似assign
对象释放时,属性值会变成nil
unsafe_unretained
类似assign,适用对象类型
目标对象释放后,属性值不会自动清空,不安全
7.在对象内部尽量直接访问实例变量
速度快
不会调用“设置方法”
不会触发KVO
不方便查错
折中方案:写入实例变量时,通过“设置方法”;读取实例变量时,直接访问
提高读取速度
控制对属性的写入操作
8.理解“对象等同性”这一概念
==
比较指针本身
isEqual:
比较两个对象
isEqualToString:
速度更快
相同的对象有相同的hash码,但hash码相同对象未必相同
9.以“类族模式”隐藏实现细节
把实现细节隐藏在简单的公共接口后面
10.在既有类中使用关联对象存放自定义数据
objc_getAssociatedObject
objc_setAssociatedObject
11.理解objc_msgSend作用
静态绑定(static binding):在编译期就能决定运行时所应调用的函数
动态绑定(dynamic binding):所调用的函数在运行期才能确定
self:代表接收者
SEL:代表@selector()
...:代表消息后续参数
流程
在接收者所属的类中搜寻其“方法列表”,找到,则跳转至实现代码
找不到,沿着继承体系向上查找,找到,再跳转
还找不到,执行消息转发(message forwarding)
其他函数
objc_msgSend_stret:发送的消息返回结构体
objc_msgSend_fpret:发送的消息返回浮点数
objc-msgSendSuper:如果要给超类发消息
12.理解消息转发机制
分支主题
13.用“方法调配技术”调试“黑盒方法”
14.理解“类对象”的用意
id:通用对象类型
如果声明时指定具体类型,在该类实例中调用该类没有的方法时,编译器会警告,而id不会
isMemberOfClass:判断对象是否为某个类的实例,不包括父类和子类
isKindOfClass:判断对象是否为某个类的实例或其派生类的实例,包括父类,不包括子类
0 条评论
回复 删除
下一页