属性
“属性”是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》一书,有兴趣的可以翻看一下
网友评论