属性 属性 '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 的全部意义在于,当对象被释放时,属性 变为 nilnonnull 的全部意义在于 属性 永远不可能是 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 属性。