iOS内存管理-setter方法简单剖析

2023-03-19  本文已影响0人  萧修

本节目标:
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内部做了什么

上一篇下一篇

猜你喜欢

热点阅读