美文网首页
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 让一个只读属性,内部支持读写,外部只读。

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

  • swift外部只读属性

    iOS中经常看到一些系统类的属性是get-only的,一旦你想对它进行修改,编译器就会提示Cannot assig...

  • Swift基础教程-- Iheritance&Init

    继承父类时,可以将父类的只读属性重写为可读写。但不可以将父类的可读写属性改为只读属性 不能给一个属性既提供自定义s...

  • @property 属性

    readonly此标记说明属性是只读的,默认的标记是读写,如果你指定了只读,在@implementation中只需...

  • iOS开发 属性关键字

    一、属性分为三大类 1、读写性控制 readOnly只读,只会生成get方法,不会生成set方法(但外部还是可以...

  • Python之路7:文件处理

    文件处理的操作 基础语法: python打开文件常用模式: 只读,读写,二进制只读及读写模式 只读模式打开一个文件...

  • # 只读属性

    getter & setter 在 Swift 中 getter & setter 很少用,以下代码仅供了解 存储...

  • 高效的Kotlin——限制可变性

    限制可变性(Limit mutability) 只读属性 val 只读属性val可以改变,但是只读属性并没有提供修...

  • iOS 属性关键字

    1. 读写权限 readonly:只读属性; readwrite:可读可写(默认); 2. 原子性 atomic:...

  • @property

    类似oc属性简化set/get方法,这里多了个del 属性的只读/ 上面的birth是可读写属性,而age就是一个...

网友评论

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

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