首页 > 代码库 > 第6条: 理解“属性”这一概念

第6条: 理解“属性”这一概念

通过对象来存储并传递数据,

在对象之间传递数据并执行任务的过程称为“消息传递”

OC对象会把其所需要的数据保存为实例变量并通过“存取方法”来访问。这称为属性

 

@dynamic  

  告诉编译器:不要自动创建实现属性所用的实例变量,也不要为其创建存取方法。这样在编译时虽然发现没有定义存取方法也不会报错,相信在运行期能找到。

  例:CoreData 框架中的NSManagedObject类的子类时,用了这个关键字,说明数据是在运行时创建存取方法的。

 

属性特质:4类

  原子性:nonatomic,非原子的, 不使用同步锁。这并不能保存线程安全。

  非原子性:使用同步锁开销较大,所以iOS程序几乎不用。但在Mac OS X程序时,对性能没什么影响。

  读写、只读:readwrite, readonly(没有setter方法)

  内存管理语义:

    assign, strong(先保留新值,并释放旧值,再赋新值), weak(既不保留新值,也不翻放旧值,类似assign,安全), unsafe_unretained(类似assign,与weak的区别:不安全), copy(与strong类似,避免可变发生,例如:字符串NSString,因为值可能来自子类NSMutableString,可能被更改,所以用copy)

  

方法名设置别名:例:@property(nonatomic, getter = isOn) BOOL on;

 

在设置属性所对应的实例变量时,一定要遵从该属性所声明的语义

  例: init方法中 

    -(id)initWithFirstName:(NSString*)firstName lastName:(NSString*)lastName {

      if(self = [super init]) {

        _firstName = [firstName copy];

        _lastName = [lastName copy];

      }

      return self;

    }

 

  

 

第6条: 理解“属性”这一概念