说一下对 retain
,copy
,assign
,weak
,_Unsafe_Unretain
关键字的理解。
Strong
Strong
修饰符表示指向并持有该对象,其修饰对象的引用计数会加1。该对象只要引用计数不为0就不会被销毁。当然可以通过将变量强制赋值nil
来进行销毁。
Weak
weak
修饰符指向但是并不持有该对象,引用计数也不会加1。在Runtime
中对该属性进行了相关操作,无需处理,可以自动销毁。weak
用来修饰对象,多用于避免循环引用的地方。weak
不可以修饰基本数据类型。
assign
assign
主要用于修饰基本数据类型,
例如NSInteger
,CGFloat
,存储在栈中,内存不用程序员管理。assign
是可以修饰对象的,但是会出现问题。
copy
copy
关键字和strong
类似,copy
多用于修饰有可变类型的不可变对象上NSString
,NSArray
,NSDictionary
上。
__unsafe_unretain
__unsafe_unretain
类似于weak
,但是当对象被释放后,指针已然保存着之前的地址,被释放后的地址变为僵尸对象
,访问被释放的地址就会出问题,所以说他是不安全的。
__autoreleasing
将对象赋值给附有
__autoreleasing
修饰的变量等同于ARC
无效时调用对象的autorelease
方法,实质就是扔进了自动释放池。
网友评论