简介: property组合了新的预编译指令和新的属性访问器语法。
1、@property 表示声明了对象的一个属性。例如: @property float smsHandling; 表示某个类的对象具有了一个float类型的名为smsHandling的属性。
property自动生成了 -setsmsHandling 和 -getsmsHandling两个方法来操作属性.
2、@synthesize 表示创建该属性的访问器(Ps: -setsmsHandling 和 -getsmsHandling两个方法是在这句存在的情况下才开始由编译器输出的).
3、property支持点访问,比如:(假设拥有上面属性的类为A)A.smsHandling = 0.3 ;
4、property的扩展功能:(以上介绍的是property的基本用法)
我们还可以生命具有其他属性的@property,用来表达我们希望特性具有某种行为的确切意愿。
@property (copy) NSString * name;//通过想name这个属性添加copy的方法,使编译器和类的使用者知道name对象将被复制。
关于属性的括号内的扩展支持如下:
1,getter=getterName,setter=setterName,设置setter与getter
的方法名
2,readwrite,readonly,设置可供访问级
2,assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题
3,retain,setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序(CC上有相关资料)
4,copy, setter方法进行Copy操作, 与retain处理流程一样, 先旧值release, 再Copy出新的对象, retainCount为1. 这是为了减少对上下文的依赖而引入的机制.
5,nonatomic, 非原子性访问, 不加同步, 多线程并发访问会提高性能. 注意, 如果不加此属性, 则默认是两个访问方法都为原子型事务访问. 锁被加到所属对象
以上的使用方式:
- 使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等)
- 使用copy: 对NSString
- 使用retain: 对其他NSObject和其子类
注:
retain的实际语法为:
- (void)setName:(NSString *)newName {
if (name != newName) {
[name release];
name = [newName retain];
// name’s retain count has been bumped up by 1
}
}
浙公网安备 33010602011771号