最近我将我的Xcode升级到了7.0版本。现在,我每次使用IBOutlet时都会收到以下提示:
@property (nonatomic, weak, nonnull) IBOutlet UITableView *tableView;
属性属性“nonnull”和“weak”是互斥的
我该怎么办?
最近我将我的Xcode升级到了7.0版本。现在,我每次使用IBOutlet时都会收到以下提示:
@property (nonatomic, weak, nonnull) IBOutlet UITableView *tableView;
属性属性“nonnull”和“weak”是互斥的
我该怎么办?
weak
的关键在于当对象被释放时,属性会变为nil
。而nonnull
的关键在于该属性永远不可能是nil
。这就是为什么你不能同时应用两者的原因。
要么让你的属性成为strong nonnull
,要么就只使用weak
。
为了完整起见,我认为我应该在这里添加第二个答案。严谨地说,如果属性具有自定义的getter和setter,则弱引用和非空并不真正互斥。例如:
@property(...) Foo *foo;
- (Foo *)foo {
if (_foo) return _foo;
return [Foo sharedInstance];
}
- (void)setFoo:(Foo *)newFoo {
assert(newFoo);
_foo = newFoo;
}
但是也没有充分的理由允许这样做,因为没有不允许将变量设置为 nil 以将其重置为默认值的充分理由。当您这样做时,您需要指定 null_resettable
属性。