Object-C中的特性-----property

简介: 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对象将被复制

     关于属性的括号内的扩展支持如下:

     

1getter=getterNamesetter=setterName,设置settergetter

的方法名

     2readwrite,readonly,设置可供访问级

     

     2assignsetter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题

     3retainsetter方法对参数进行release旧值再retain新值,所有实现都是这个顺序(CC上有相关资料)

     4copysetter方法进行Copy操作, 与retain处理流程一样, 先旧值release, Copy出新的对象, retainCount1. 这是为了减少对上下文的依赖而引入的机制.

     5nonatomic非原子性访问, 不加同步, 多线程并发访问会提高性能. 注意, 如果不加此属性, 则默认是两个访问方法都为原子型事务访问. 锁被加到所属对象

     以上的使用方式:

  • 使用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
    }
}

你可能感兴趣的:(多线程,扩展,float,setter,getter,编译器)