会自动地变为nil。一般情况下,如果父对象拥有子对象的引用,那么子对象就不应该再持有父对象的强引用,而是使用弱引用的方式来引用父对象。
f。strong:表示这个值是一个强引用,引用和被引用之间具有所属关系。从内存使用的角度来看,就是引用对象被回收之前,被引用的对象不会被回收。
4.原子化和非原子化:atomi和nonatomic用来决定编译器生成的getter和setter是否为原子操作。
a。nonatomic指定访问器方式是非线程安全的,即多个线程可以同时访问这个属性。
b。默认情况下,访问器方法都是 线程安全的,即使在多线程环境中也毫无风险的。然而,即使要保证在多线程环境中能正常工作,访问器也不一定必须是线程安全的。而将访问器方法指定为非线程安全的,可以让getter方法直接返回实例变量的值,效率更高。
********************
合成(Synthesizing)属性
1.声明一个属性之后编译器会自动将相关的代码补充完整,即编译器会自动声明一个实例变量以及相关的访问器方法,实例变量的名称是属性名称前面加上下划线。
2.不过有时候我们需要自己来指定实例变量的名称,这时候就需要用到@synthesize指令了。
3.
a。如果你不得不手动指定属性对应的实例变量的名称,请在@implementation指令之后使用@synthesize指令做如下声明:
@synthesize label;
这行代码要求编译器根据接口中声明的属性来自动生成访问器方法。
b。也可以使用如下的方式来指明访问器方法使用的实例变量的名称:
@synthesize label = _label;
这里指明了实例变量名为_label,而且这是一种很好的封装实例变量的方法,让所有对该实例变量的访问都通过访问器方法来执行。同时,这种方法也可以避免编译器自动取名字时和已用的实例变量名称冲突的情况。