本节目标:
1、掌握setter中对旧值和新值操作处理
2、部分文件如何开启手动管理内存
掌握MRC下引用计数加和减,是为了更好理解iOS中的内存管理。
内存管理主要是解决内存分区中堆区,这块需要程序员手动申请和释放
release、retain、retainCount
Xcode配置:
关闭ARC :-fno-objc-arc
实例代码
.h文件
@interface Person : NSObject {
Car *_car;
}
- (void)setCar:(Car *)car;
- (void)run;
.m文件
@implementation Person
- (void)setCar:(Car *)car {
if (_car != car) {
[_car release];
_car = [car retain];
}
}
- (void)run {
NSLog(@"开%@车去玩",_car.name);
}
- (void)dealloc {
[_car release];
[super dealloc];
NSLog(@"人销毁了");
}
@end
setter方法的引用计数
第一句 if(_car != car)
这句判断 新传的car
和旧的car
是否是同一个,保证旧对象可以被释放。
因为_car被外界赋值的时候,要了解旧对象的处理,要不然就会形成僵尸对象
。
_car release
释放对象
_car = car retain
对象引用计数+1之后 赋值给_car
dealloc
调用时机
手动对Person调用release方法,当引用计数为0,发送调用。
dealloc内部做了什么
网友评论