目标C:属性属性
Objective C属性,Objective-C中最困难的部分。 很多时候,即使是开发人员,甚至是StackOverflow,都让您在何时需要使用哪个属性时陷入困境。
最终,随着ARC(自动引用计数)出现在市场上的岁月,iOS中的内存管理得到了改进,在该市场中,我们无需为对象释放后定义的所有对象进行dealloc和deinit定义。 ARC版本的内存管理的发布使iOS中的开发变得更加容易,并且内存泄漏等情况会自动得到多次处理。
我们将在这里讨论的主要目标C属性是:
- 强:强是保留的新形式。 到iOS 4为止,我们一直使用retain代替strong 。 Strong仅定义对象的所有权。 对象的生命周期将一直保留,直到所有者本身未取消分配对象为止。 我们通常对对象的父级使用strong ,即在UI Elements的情况下,对UIViewController使用strong 。
- 保留:保留还拥有object属性。 在一般情况下,当我们要为同一对象使用新的设置器时,如果要删除先前的值,则使用保留 。
- 弱:弱只是一个指针,仅在对象由某个强大属性拥有时才起作用。 我们通常使用弱以避免保留周期。 保留周期仅表示如果A强烈指向B,B强烈指向C,并且在任何情况下C似乎也强烈指向A,那么它将在所有A,B,C属性之间产生死锁。 为了避免保留周期,我们通常使任一过渡都变弱,而不是强过渡。 弱属性通常与IBOutlet,Delegates和其他Objective-C参考一起使用。
- 分配:分配是弱属性的旧版本。 到iOS 4为止,我们一直使用分配代替弱属性。 Assign主要用于基本数据类型,例如int,float等。
- 原子:在线程安全的情况下,原子属性是默认属性,但可以用nonatomic覆盖。 原子属性定义属性是线程安全的,并且将始终返回真实值。 垃圾值的可能性是最小的。 由于它是线程安全属性,因此比其竞争对手nonatomic花费更多的时间执行。
- NonAtomic:NonAtomic属性不是线程安全的,不能保证结果真实,但始终会给出结果。 简单的情况就可以理解,如果A将B设置为“ Srijan”,而C将B设置为“ Kumar”,则D可能会想要D获得B的值,这可能会产生类似“ Srimar”或“ janKum”,但非原子总是给出结果。 因为它不是线程安全的属性,所以它比atomic快。 对于几乎是类的对象,我们盲目使用非原子。
- ReadOnly:顾名思义,readonly属性增强了该属性的接口,即其他对象只能读取该属性,而不能设置该属性的值。 我们使用只读,不想让其他类设置属性的值。
- 读写:这也是默认行为。 一旦你合成了一个属性,它就可以对该属性进行获取和设置。我们只需在实现模块中编写@synthesize即可 。