我的应用程序中有一个IBOutlet NSLayoutConstraint
。非常简单:
@property (nonatomic, weak) IBOutlet NSLayoutConstraint* leftConstraint;
我想在某个时候停用这个约束:
self.leftConstraint.active = NO;
这种情况发生在从 cellForRowAtIndexPath:
调用的方法中。在上述代码行之后,约束变成了 nil。但是,如果我将此属性声明为 strong
,那么就不会出现这种情况,它不会变成 nil。有人能解释一下为什么会这样吗?
NSAutolayoutConstraint
设置为strong
是安全的。据我了解,NSAutolayoutConstraint
本身对其约束的元素具有weak
引用,因此不存在循环引用的可能性。不过如果有错误,请指正!这似乎是一个可以通过简单的单元测试来解决的问题。创建两个视图。在它们之间创建一个强约束。释放视图上的强引用。检查视图上的弱引用是否仍然能够访问它们。如果可以,则该约束确实将它们保持在一起,否则就没有。 - Benjohn