【发布时间】:2018-05-30 08:13:35
【问题描述】:
最近我将我的 Xcode 升级到了版本 7 - XCode 7.0。现在,我的每个 IBOutlet 都收到了这条消息:
@property (nonatomic, weak, nonnull) IBOutlet UITableView *tableView;
属性属性 'nonnull' 和 'weak' 是互斥的
我能做什么?
【问题讨论】:
标签: ios objective-c xcode7
最近我将我的 Xcode 升级到了版本 7 - XCode 7.0。现在,我的每个 IBOutlet 都收到了这条消息:
@property (nonatomic, weak, nonnull) IBOutlet UITableView *tableView;
属性属性 'nonnull' 和 'weak' 是互斥的
我能做什么?
【问题讨论】:
标签: ios objective-c xcode7
weak 的全部意义在于,当对象被释放时,属性变为nil。 nonnull 的全部意义在于该属性永远不能是 nil。这就是为什么你不能同时应用两者。
将您的财产设为strong nonnull 或仅设为weak。
【讨论】:
weak。谢谢!
为了完整起见,我想我应该在这里添加第二个答案。如果一个属性有自定义的 getter 和 setter,weak 和 nonnull 并不是真正相互排斥的。例如:
@property(...) Foo *foo;
- (Foo *)foo {
if (_foo) return _foo;
return [Foo sharedInstance];
}
- (void)setFoo:(Foo *)newFoo {
assert(newFoo);
_foo = newFoo;
}
但也没有充分的理由允许这样做,因为没有充分的理由不允许将变量设置为 nil 以将其重置为默认值。当你这样做时,你指定了null_resettable 属性。
【讨论】: