iOS开发攻城狮的集散地程序员

OC中“属性”的概念

2018-09-03  本文已影响52人  翰霖啊

属性
“属性”是OC语法的特性,用于封装对象中的数据,每个不同的属性使用存取方法来调用,同样也可以使用点语法来更方便的操作属性,例如

EOCPersion * person = [EOCPersion new];
person.firstName = @“Tom”;
[person setFirstName:@“Tom”];
//以上两者没有区别,使用点语法编译器会自动转换成存取方法的调用。

如果想在.m文件中改变变量的名字,可以使用关键字synthesize
@synthesize name = _newName;

属性可以动态创建setter和getter方法,正常只能对其中一个方法进行重写,如果想要两个都重写使用dynamic
@dynamic name;
这里表示告诉编译器不需要自动合成setter和getter方法,当出现dynamic关键字的时候,即使没有重写存取方法,也不会报错
编译器会认为运行时可以找到该方法

属性特质
每个属性都有自己的属性特质,不同特质在系统自动生成setter和getter方法的时候也有着不同。

属性特质分为四大类
1.原子性:atomic原子性,使用同步锁,安全性更高但是效率会降低,nonatomic非原子性,默认为atomic
2.读/写权限:readwrite可读写,readonly只读,默认为readwrite
3.内存管理语义:assign,对基本类型使用,strong强指针关系,weak弱指针关系,copy拷贝关系
4.方法名:getter=<name> 或 setter=<name> 后者不常见 @property (nonatomic, getter=isOn) BOOL on;
本文部分内容参考自《effective+objective-c》一书,有兴趣的可以翻看一下

上一篇 下一篇

猜你喜欢

热点阅读