ios属性访问

来源:互联网 发布:sql 错误2 编辑:程序博客网 时间:2024/05/22 03:36

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

atomic: 原子操作

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

nonatomic: 非原子操作

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

copy

拷贝,新开地址,内容拷贝, setter 方法进行 Copy 操作,与 retain 处理流程一样,先旧值 release ,再 Copy 出新的对象, retainCount 为 1 。这是为了减少对上下文的依赖而引入的机制。

strong

强引用,计数器加1,和retain一样(对应retain和copy)

weak

用来修饰弱引用的属性

strong和weak的区别

(weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它。

一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。

assign

用于简单类型,计数器不加,直接赋值,一个指针,一块地址, setter 方法直接赋值,不进行任何 retain 操作,为了解决原类型与环循引用问题

readonly

只读,只生成get方法,没有set方法

readwrite

默认,可读写,set,get方法都会生成

0 0
原创粉丝点击