美文网首页
iOS内存管理-setter方法简单剖析

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

作者: 萧修 | 来源:发表于2023-03-19 09:44 被阅读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内部做了什么

    相关文章

      网友评论

          本文标题:iOS内存管理-setter方法简单剖析

          本文链接:https://www.haomeiwen.com/subject/kbnerdtx.html