zoukankan      html  css  js  c++  java
  • 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];

    }

  • 相关阅读:
    linux 操作系统 基础
    [HAOI2011]Problem A
    [HNOI2015] 菜肴制作
    [P3676]小清新数据结构题
    [NOI2016]区间
    [BOI2007]Mokia 摩基亚
    [NOI2012]美食节
    [CQOI2015]网络吞吐量
    [六省联考2017]期末考试
    [HNOI2015]亚瑟王
  • 原文地址:https://www.cnblogs.com/pruple/p/5240198.html
Copyright © 2011-2022 走看看