第十讲.内存管理高级(属性内部实现原理,遍历构造器的内存管理,dealloc销毁内存的方法,多态)
一、属性的内部实现原理
1.assign属性的语义特性及使用范围
Person.h 文件
assign的内部实现(会出面试题)
//在内存被系统回收之后,还在使用,容易产生野指针问题(例子如下)。
//assign适合基本数据类型,基本数据类型不会引起内存问题。
2.retain属性的使用
retain属性的实现细节
在调用过程中想清楚过程
注意:(实现的过程)
3.copy属性的使用
copy适用于接受了NSCopying协议的对象,因为只有接受了NSCopying协议,对象才能执行copy操作
copy的实现细节(注意里面对于内存的管理)
用内存管理的方式解析copy
注意:思路详解
二、dealloc内释放实例变量
- 什么是dealloc?
dealloc是NSObject的一个实例方法,与alloc对应用于回收开辟的内存空间
这个方法在对象引用计数为0时,由系统自动调用
通常我们在dealloc中释放类的实例变量 - 如何使用dealloc?
// Person.m中
- (void)dealloc
{
[_name release]; // 释放setter方法泄露的
[super dealloc];
}
- dealloc注意事项:
永远不要手动调用dealloc
在dealloc方法的最后一行,必须要写[super dealloc];
三、便利构造器方法的实现原理
// 遍历构造器在使用的过程中要注意对内存的管理
//遍历构造器的格式注意,同时在使用时要与初始化配合使用
return [p autorelease];是最完美的解决方案,既不会内存泄露,也不会产生野指针
注意:在遍历构造器的内部已经用autorelease进行了内存的释放管理,所以再使用release进行释放,会引起过度释放问题
四、collection的内存管理
1>.collection:collection就是NSArray,NSDictionary,NSSet...等容器类
collection会自主管理自己内部的元素
2>.加入collection中的对象会被retain
3>.移除出collection的对象会被release
4>.collection被释放会对内部所有对象release
五.多态
1>.多态的含义:早上我和同事说口渴,想喝水。结果:A同事拿着我的杯子去给我接了一杯水。B同事顺手在饮水机上拿了一次性纸杯给我接了杯水。C同事给了我一瓶他早上刚买的饮料。同事得到的是同样地请求,但是三个人都有各自的解决办法,这就是多态。
多态就是不同对象在响应同一个请求时候不同的实现。父类指针可以指向子类对象。
2>.多态的特点:
a. 父类指针可以指向不同的子类对象
b. 允许在多个类中定义同一个消息接口
c. 可以屏蔽不同的子类之间的差异,可以通用代码
d. 适应需求的不同变化
实例分析:
定义Animal类,和它的子类,Cat、Dog类:
Animal.h文件
Animal.m文件
cat.h文件(继承于Animal)
cat.m文件
dog.h文件(继承于Animal)
dag.m文件
main.m文件(父类的同一方法,父类和多个子类可以同时响应,这就是多态)