属性 属性 'nonnull' 和 'weak' 是互斥的
Property attributes 'nonnull' and 'weak' are mutually exclusive
最近我将 Xcode 升级到版本 7 - XCode 7.0。现在我将此消息发送到我的每个 IBOutlet:
@property (nonatomic, weak, nonnull) IBOutlet UITableView *tableView;
属性属性'nonnull'和'weak'互斥
我能做什么?
weak
的全部意义在于,当对象被释放时,属性 变为 nil
。 nonnull
的全部意义在于 属性 永远不可能是 nil
。这就是为什么你不能同时应用两者的原因。
要么让你的 属性 strong nonnull
要么只是 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
属性。
最近我将 Xcode 升级到版本 7 - XCode 7.0。现在我将此消息发送到我的每个 IBOutlet:
@property (nonatomic, weak, nonnull) IBOutlet UITableView *tableView;
属性属性'nonnull'和'weak'互斥
我能做什么?
weak
的全部意义在于,当对象被释放时,属性 变为 nil
。 nonnull
的全部意义在于 属性 永远不可能是 nil
。这就是为什么你不能同时应用两者的原因。
要么让你的 属性 strong nonnull
要么只是 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
属性。