IOS开发之属性详解

在开发过程中经常要用到定义属性,@property和@synthesize是经常用到的关键字,那么到底该如何正确定义一个属性呢,我们需要了解其中用到的关键字。

atomic: 原子操作(原子性是指事务的一个完整操作,操作成功就提交,反之就回滚. 原子操作就是指具有原子性的操作)在objective-c 属性设置里面默认的就是atomic,意思就是setter/getter函数是一个原子操作,如果多线程同时调用setter时,不会出现某一个线程执行完setter所有语句之前,另一个线程就开始执行setter,相当于函数头尾加了锁. 这样的话并发访问性能会比较低.

nonatomic: 非原子操作 一般不需要多线程支持的时候就用它,这样在并发访问的时候效率会比较高. 在objective-c里面通常对象类型都应该声明为非原子性的. iOS中程序启动的时候系统只会自动生成一个单一的主线程.程序在执行的时候一般情况下是在同一个线程里面对一个属性进行操作. 如果在程序中我们确定某一个属性会在多线程中被使用,并且需要做数据同步,就必须设置成原子性的,但也可以设置成非原子性的,然后自己在程序中用加锁之类的来做数据同步.通常说nonatomic 是提高在非多线程应用中的读写效率

在头文件中声明属性的时候使用atomic 和 nonatomic等价于在头文件里面添加2个函数一个是用于设置这个属性的,一个是用于读取这个属性,例如:- (nsstring *)name; - (void)setName:(NSString *)str;

atomic / nonatomic 需要和@synthesize/@dynamic配和使用才有意义.


@synthesize 如果不实现setter和getter方法,编译器将会自动在生产setter和getter方法。

@dynamic 表示变量对应的属性访问器方法,是动态实 现的,你需要在NSObject 中继承而来的+(BOOL) resolveInstanceMethod:(SEL) sel 方法中指定动态实现的方法或者函数。

 

属性修饰其他关键字

getter=getterName

指定get方法,并需要实现这个方法。必须返回与声明类型相同的变量,没有参数

setter=setterName

指定set方法,并需要实现这个方法。带一个与声明类型相同的参数,没有返回值(返回空值)

当声明为readonly的时候,不能指定set方法

readwrite

如果没有声明成readonly,那就默认是readwrite。可以用来赋值,也可以被赋值

readonly

不可以被赋值

assign

所有属性都默认assign,通常用于标量(简单变量 int, float,CGRect等),只是简单的传递指针.

一种典型情况是用在对对象没有所有权的时候,通常是delegate,避免造成死循环(如果用retain的话会死循环)

retain

属性必须是objc对象,拥有对象所有权,必须在dealloc中release一次,是在传递指针后 retainCount +1

copy

属性必须是objc对象,拥有对象所有权,必须在dealloc中release一次。且属性必须实现NSCopying协议

一般常用于NSString类型,是创建分配一个新的空间,从原址的内容复制内容过来

 

dealloc 后relase的事情,建议是在每个 object的 m文件里 成对的创建和销毁变量.谁创建,谁负责销毁,谁retain 谁来release
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值