属性修饰符'nonnull'和'weak'是互斥的。

5

最近我将我的Xcode升级到了7.0版本。现在,我每次使用IBOutlet时都会收到以下提示:

@property (nonatomic, weak, nonnull) IBOutlet UITableView *tableView;

属性属性“nonnull”和“weak”是互斥的

我该怎么办?

2个回答

14

weak的关键在于当对象被释放时,属性会变为nil。而nonnull的关键在于该属性永远不可能是nil。这就是为什么你不能同时应用两者的原因。

要么让你的属性成为strong nonnull,要么就只使用weak


不错。我正在学习关于泛型和可空性的知识,目前我找到的方法是只使用“weak”。谢谢! - Joel Banzatto
你提出的属性与泛型无关,它是一个插座。 - rmaddy

0

为了完整起见,我认为我应该在这里添加第二个答案。严谨地说,如果属性具有自定义的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 属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接