说一下对 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方法,实质就是扔进了自动释放池。










网友评论