美文网首页
iOS 让一个只读属性,内部支持读写,外部只读。

iOS 让一个只读属性,内部支持读写,外部只读。

作者: 纯纯奶油酱 | 来源:发表于2018-01-10 13:29 被阅读0次

    大致思路声明属性为只读,但是重写setter赋值方法,具体实现如下:

    import <Foundation/Foundation.h>

    @interface Person : NSObject
    @property(nonatomic,readonly,copy)NSString * name;//外部只读属性
    +(id)shareManager;
    @end

    .m 中重写setter方法
    @synthesize name =_name;
    -(void)setName:(NSString *)name
    {
    if (_name!=name) {
    [_name release];
    [name retain];
    _name = name;
    }
    }
    -(void)logRetainCount{
    NSLog(@"--%s--%@--%ld",func,self,CFGetRetainCount((__bridge CFTypeRef)(self)));
    }
    +(id)shareManager{
    Person * person = [[Person alloc] init];
    [person logRetainCount];
    person.name = @"123";
    [person test];
    return person;
    }
    -(void)test{
    self.name = @"123124";
    }
    由于类是使用MRC 创建的 所以setter方法 里面出现了 retain 以及 release
    编译发现 正常能在类内部修改 属性

    但是在外部创建时候 使用:
    Person * person = [Person shareManager];
    person.name = @"123";
    会出现警告 name为只读属性。

    当然使用KVC赋值可以。

    相关文章

      网友评论

          本文标题:iOS 让一个只读属性,内部支持读写,外部只读。

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