标签:layout 基本 调用函数 tar 变量 关系 设置为nil 系统管理 出现
__strong
__weak
__unsafe_unretained
__autoreleaseing
Person * __strong p1 = [[Person alloc] init]; //创建对象之后引用计数器 为1,并且对象在p1被引用期不会被释放。
Person * __weak p2 = [[Person alloc] init]; //创建对象之后引用计数器 为0,对象会被立即释放,且p2将被设置为nil
Person * __unsafe_unretained p3 = [[Person alloc] init];//创建对象之后引用计数器 为0,对象会被立即释放,且p2不会被设置为nil
Person * __autoreleasing p4 = [[Person alloc] init]; //创建对象之后引用计数器 为1,当方法返回时对象会被立即释放
strong
默认,指定了__strong关系, 能保证 对象在其作用于内不会被销毁。
weak
指定了__weak关系,如果在一个{}作用于定义了一个__weak修饰的对象,由于引用计数器没有+1,创建好就是0,所以创建好了里么就会被销毁置nil。
assign
ARC当中表示 __unsafe_unreataied关系
copy
暗指了 __strong关系,它还暗指了 setter中的复制语义。
retain
指定了__strong关系。ARC中基本不用。
unsafe_unretained
指定了__unsafe_unretained关系。
注意:
assign 和 unsage_unretained 只进行值复制而没有任何实质性的检查,所以他们应该用于值类型(BOOL, NSInter, NSUInteger),应该避免将他们用于引用类型,尤其是指针类型,如NSString *, UIView *。
unsage_unretained修饰的对象创建之后会被立即释放,但是内存可能还没有被回收,这个引用可以使用,且不会导致错误。但是再次调用创建这个unsage_unretained修饰的对象的函数时就会出现SIGABRT崩溃。原因,第二次创建调用函数时,对象已经析构,而且内存也被重新分配和使用了,于是导致了非法访问。
标签:layout 基本 调用函数 tar 变量 关系 设置为nil 系统管理 出现
原文地址:https://www.cnblogs.com/wjw-blog/p/9186257.html