property详解(二)

来源:互联网 发布:js的if else 编辑:程序博客网 时间:2024/06/05 18:28

2.1 可读性

readwrite:这个参数,使得声明的变量有get方法和set方法
readonly:这个参数,使得声明的变量只有get方法,而set方法需要用户自己去定义
readonly参数的作用,就是为了防止外部类会对该变量进行修改。
其中,readwrite是默认的

2.2 原子性

atomic:原子性,可以提供多线程安全。 它会增加一定的开销,但是在多线程环境下,应该进行原子操作,否则有可
能引起错误的结果。
nonatomic:非原子性,不能提供多线程安全。它会禁止多线程,从而保护变量。同时,它不会有额外的开销,所以相
比起原子性,它有着更好的性能。
其中,atomic是默认的。但是,这种方式比较浪费资源。所以,在没有使用多线程的情况下,最好还是使用nonatomic。

2.3 strong和weak

strong和weak是由ARC新引入的对象变量属性。
strong关键字,可以为对象添加一个拥有者。
使用weak关键字,不会为对象添加拥有者。声明为weak的指针,指针指向的地址一旦被释放,这些指针都将被赋值为 nil。这样的好处能有效的防止野指针。

如果一个对象在某段时间中反复加载,而你又不希望每次加载都要重新alloc 的话,那就用strong,strong 保证对此对象保持一个强引用,对于这个对象,只要有1个strong引用的话,那它就不会释放,当然多个strong同时作用于它也不会释放。

如果一个对象在某段时间只会加载一次,并且加载之后确定不再使用了,那就可以使用weak,这样当其他原因导致引用计数减1(比如 removefromsuperview)的时候,此对象就自动释放了。无需再在delloc 里面再release一次,但你要保证释放之后确实不再使用此对象,否则将导致错误。

ARC的规则是:只要对象还存在拥有者(即还有变量指向对象),对象就会保持在内存中。

2 0
原创粉丝点击