强/弱/保留/ unsafe_unretained / assign
综合属性的属性:保留/分配
- 保留 – 保留,旧值被释放并被分配
- 分配 – 它只被分配
所有权属性: IOS5 = strong / weak IOS4 = retain / unsafe_unretained
-
强(iOS4 =保留) – 我是主人,你不能在这个目标罚款之前释放这个=保留
-
弱(iOS4 = unsafe_unretained) – 与分配,保留或释放相同的东西
所以unsafe_unretained ==分配?
@property (nonatomic, assign) NSArray * tmp;
等于?
@property (nonatomic, unsafe_unretained) NSArray * tmp;
反之亦然?
如果是这样,哪一个更喜欢在iOS4,或为什么有(unsafe_unretained),如果它完全相同的分配?
并在iOS4的代表应该unsafe_unretained或分配?
如果是这样,哪一个更喜欢在iOS4,或为什么有(unsafe_unretained),如果它完全相同的分配?
你应该使用unsafe_unretained
。 您想向您的代码读者展示您实际上想要使用的代码,但是这不可行,因为在您想要部署的iOS版本上没有可用的弱代码。
有一天你会放弃对iOS4的支持。 然后你可以只searchunsafe_unretained
并用weak
代替所有的。 这将比寻找assign
和找出你是否意味着assign
或者weak
使用unsafe_unretained
创build更易读易懂的代码,开发人员的意图更易于查看。 基本上同样的原因,我们使用YES
而不是1
。
Cocoa和Cocoa Touch中有几个类还不支持弱引用,这意味着你不能声明弱属性或弱局部variables来跟踪它们。 这些类包括NSTextView,NSFont和NSColorSpace; 有关完整列表,请参阅转换到ARC版本说明。
如果您需要使用对这些类之一的弱引用,则必须使用不安全的引用。 对于属性,这意味着使用unsafe_unretained属性:
@property (unsafe_unretained) NSObject *unsafeProperty;
对于variables,你需要使用__unsafe_unretained:
NSObject * __unsafe_unretained unsafeReference;
不安全的引用类似于弱引用,因为它不保留其相关对象的活动状态,但是如果目标对象被释放,它将不会被设置为零。 这意味着你将留下一个悬挂的指针,指向原来被释放的对象占用的内存,因此术语“不安全”。发送消息给悬挂指针将导致崩溃。
- 如何确定基于内容的UIWebView高度,在一个可变的高度UITableView?
- 使用Objective C / Cocoa来避开unicode字符,即\ u1234
- NSTimeZone:localTimeZone和systemTimeZone有什么区别?
- 为什么使用id,当我们可以只使用NSObject?
- 观察一个NSMutableArray插入/删除
- 我怎么能从一个UINavigationControllerpopup一个视图,并用另一个操作中的另一个replace它?
- 更改UITableView节标题的默认滚动行为
- 如何将UITableViewCellSelectionStyle属性设置为某种自定义颜色?
- NSUserDefaults同步方法