ios开发中@property的属性介绍

这个是基础知识,虽然基础,但是比较重要。我接触到的同事在开发中遇到一些问题,不太明白问题是由什么原因引起的,其实好多问题就是因为对这块知识没有好好理解。这块涉及内存释放,一定要理解。

大家都知道@property和@synthesize可以自动生成某个类成员变量的存取方法,但可能对property中的一些属性不是很了解,网上的一些介绍有的不是很正确,感觉会误导新手,于是准备详细介绍一下property中的详细属性。

先介绍一下默认的情况:

readwrite:这个属性是默认的情况,会自动为你生成存取器

assign:这个属性一般用来处理基础类型,比如int、float等等,如果你声明的属性是基础类型的话,assign是默认的,你可以不加这个属性

对于assign来说,他的存取器代码是这样的:

[cpp]  view plain copy
  1.  @property (nonatomic, assign) NSString* myField  
  2. - (NSString*) myField {   
  3.      return myField;  
  4. }  
  5.   
  6. - (void) setMyField: (NSString*) newValue {  
  7.     myField = newValue;  
  8. }  
 

atomic:默认是有该属性的,这个属性是为了保证程序在多线程情况,编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步问题

然后说一下其他的情况:

readonly:只生成getter不会有setter方法

copy:这个会自动生成你赋值对象的克隆,相当于在内存中新生成了该对象的副本,这样一来,改变赋值对象就不会改变你声明的这个成员变量了

retain:会自动retain赋值对象,具体实现如下:

[cpp]  view plain copy
  1. @property (nonatomic, retain) NSString* myField  
  2. - (NSString*) myField {   
  3.      return myField;  
  4. }- (void) setMyField: (NSString*) newValue {   
  5.     if (newValue !=myField) {  
  6.         [myField release];  
  7.         myField = [newValue retain];  
  8.     }  
  9. }  

可见首先要判断一下当前myField是否就是新赋值来的对象,如果不是要将自己release掉,之后才会进行赋值及retain

nonatomic:如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些互斥加锁代码,可以提高效率


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值