【问题标题】:Property attributes 'nonnull' and 'weak' are mutually exclusive属性属性 'nonnull' 和 'weak' 是互斥的
【发布时间】: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


    【解决方案1】:

    weak 的全部意义在于,当对象被释放时,属性变为nilnonnull 的全部意义在于该属性永远不能是 nil。这就是为什么你不能同时应用两者。

    将您的财产设为strong nonnull 或仅设为weak

    【讨论】:

    • 不错。我正在研究泛型和可空性,我现在发现的方法只是weak。谢谢!
    • 您问题中的属性与泛型无关。这是一个出口。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-04-24
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多