欢迎使用6miu-markdown编辑器

xiaoxiao2021-02-28  142

proterty属性说明

对于@property各参数意义如下:

readwrite: 产生setter\getter方法(默认参数) readonly: 只产生简单的getter,没有setter。 assign: 默认类型,setter方法直接赋值,而不进行retain操作(默认参数) retain: setter方法对参数进行release旧值,再retain新值。 copy: setter方法进行Copy操作,与retain一样 nonatomic: 禁止多线程,变量保护,提高性能 atomic:原子性的访问方法(默认参数) 还有strong和weak等

原子性

atomic(默认):atomic意为操作是原子的,意味着只有一个线程访问实例变量。atomic是线程安全的至少在当前的访器上我是安全的。它是一个默认的,但是很少使用。它的比较慢,这跟ARM平台和内部锁机制有关。 nonatomic: nonatomic跟atomic刚好相反。表示非原子的,可以被多个线程访问。它的速度比atomic快。但不能保证在多线程环境下的安全性,在单线程和明确只有一个线程访问的情况下广泛使用。 访问器控制 readwrite(默认):readwrite是默认的,表示同时拥有setter和getter。 readonly: readonly 表示只有getter没有setter。 有时候为了语意更明确可能需要自定义访问器的名字:

@property (nonatomic, setter = mySetter:,getter = myGetter ) NSString *name; 最常见的是BOOL类型,比如标识View是否隐藏的属性hidden。可以这样声明

@property (nonatomic,getter = isHidden ) BOOL hidden; 要注意修改setter或者getter的名字是存在副作用的,可能会使KVC和KVO无法正常工作。 内存管理

retain:使用了retain意味着实例变量要获取传入参数的所有权。具体表现在setter中对实例变量先release然后将参数 retain之后传给它。下面这段代码展示了retain类似的行为: assign(默认):用于值类型,如int、float、double和NSInteger,CGFloat等表示单纯的复制。还包括不存在所有权关系的对象,比如常见的delegate。 strong:是在ARC伴随IOS引入的时候引入的关键字是retain的一个可选的替代。表示实例变量对传入的参数要有所有权关系即强引用。strong跟retain的意思相同并产生相同的代码,但是语意上更好更能体现对象的关系。 weak: weak跟assign的效果相似,不同的是weak在对象被回收之后自动设置为nil。而且weak智能用在iOS 5或以后的版本,对于之前的版本,使用unsafe_unretained。 unsafe_unretained:weak的低版本替代。 copy:copy是为是实例变量保留一个自己的副本。
转载请注明原文地址: https://www.6miu.com/read-77562.html

最新回复(0)