【问题标题】:What's the difference between 'weak' and 'assign' in delegate property declaration委托属性声明中的“弱”和“分配”有什么区别
【发布时间】:2012-03-14 18:29:18
【问题描述】:

这有什么区别:

@property (nonatomic, weak) id  <SubClassDelegate> delegate; 

还有这个:

@property (nonatomic, assign) id  <SubClassDelegate> delegate; 

我想为代表使用属性。

【问题讨论】:

    标签: objective-c ios ios5 delegates properties


    【解决方案1】:

    weakassign 的唯一区别是如果weak 属性指向的对象被释放,那么weak 指针的值将被设置为nil,这样你就永远不会冒着接触垃圾的风险。如果您使用assign,则不会发生这种情况,因此如果对象从您下方被释放并且您尝试访问它,您将访问垃圾。

    对于 Objective-C 对象,如果您处于可以使用weak 的环境中,那么您应该使用它。

    【讨论】:

    • 你知道为什么一些 Cocoa Touch 框架类还在使用 assign 来代表委托吗?例如UISearchDisplayController 的委托仍然是assign。为什么从来没有更新过?
    • @Pwner 在 iOS 8.0 中似乎已被弃用
    • 这是一个未弃用的示例:即使 UITableView 的代表也有 assign@property (nonatomic, assign) id &lt;UITableViewDelegate&gt; delegate;
    • @ChrisNolet 因为他们可能仍在内部使用 MRC(手动引用计数)。
    • 到今天为止,UITableView的delegate的例子现在是:@property (nonatomic, weak, nullable) id delegate;所以这不再是一个有效的例子。
    猜你喜欢
    • 2012-10-03
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 2011-01-14
    相关资源
    最近更新 更多