• MRC的下setter访问器的两种形式


    // Person复合了Phone和Room

    // 第一种:比较合理

    先判断对象形参传递的对象和原属性是否一致,不一致在释放旧值,给形参传递的值retain,因为retain方法会返回该对象,因此可以直接接收

    - (void)setPhone:(Phone *)phone

    {

        if (phone != _phone)

        {

            [_phone release];

            _phone = [phone retain];

        }

    }

    // 第二种

    比较直观:不管对象是否一致,先对形参传递的对象retain,释放掉属性的旧值,再把形参传递的值赋给属性(不是很完美)

    - (void)setRoom:(Room *)room

    {

        [room retain];

        [_room release];

        _room = room;

    }

    - (void)dealloc

    {

        NSLog(@"%s", __func__);

        

        

    给该属性赋值,就会调用setter访问器

        self.phone = nil; 

    // 等效的

        [_room release];

        _room = nil;

    但是不等效的[_room release]; 只有的操作只是是本类的.m文件中直接对属性进行访问,没有调用到setter

    注意:如果需要在setter访问器中需要对赋值进行屏蔽,那么如果是在.m通过_属性名的方式是不能成功的,使用self.属性名会调用访问器:即使在.m文件中赋值也可以屏蔽

    (在本类中封装方法时,给本类属性赋值如果需要屏蔽或者过滤,注意需要使用点语法来调用方法)

        

        [super dealloc];

    }

  • 相关阅读:
    面向对象
    方法
    前端学习笔记 --- HTML
    算法笔记 --- 记忆搜索算法 --- 动态规划算法
    算法笔记 --- 哈希函数分流的概念 --- 一致性哈希算法
    算法笔记 --- 排列组合 --- 括号序列问题
    算法笔记 --- 排列组合
    算法笔记 --- 布隆过滤器
    算法笔记 --- 位运算
    数据结构 --- 堆
  • 原文地址:https://www.cnblogs.com/pruple/p/5240198.html
Copyright © 2020-2023  润新知