【问题标题】:differences between weak and assign property?弱属性和分配属性之间的区别?
【发布时间】:2012-10-03 09:24:12
【问题描述】:

我有几个问题。

1)assign 属性会占用内存,因为我们不需要释放以减​​少引用计数?

2)自动归零参考和非自动归零参考有什么区别?它是如何工作的?将如何占用内存?

【问题讨论】:

    标签: iphone ios ipad


    【解决方案1】:

    weak 适用于对象(它们具有引用计数和所有内容),但弱引用不会增加引用计数。但是一旦对象被释放(从代码中的任何地方),对该对象的任何弱引用都会设置为nil。这非常有用,因为如果你只使用强引用和弱引用,你就不能得到一个无效的指针(指向一个已经被释放的对象的指针)。

    assign 对引用绝对没有任何作用,它通常用于整数、浮点数和其他非对象类型。你当然可以为这样的变量分配一个对象引用,但是如果对象被释放,你仍然会有一个指向它的内存的指针(这现在是垃圾,当你使用它时会伤害你)。

    您对“内存使用”的担忧很奇怪——引用不占用内存,对象占用。但是如果你要使用一个对象,你就不能释放它。初学者的简单规则是:对于对象,尽可能使用强引用。当您有理由不使用强引用时,请使用弱引用(通常用于委托和数据源)。对于原始类型(int、float、CGRect、...),请使用 assign,因为它们不是对象。

    【讨论】:

    • 更正您对“弱”的描述。在对象被释放之前,弱引用不会被设置为 nil,而不仅仅是释放。
    • 另请注意 assign 不允许用于 ARC 下的对象引用。如果你想要同样的行为,你必须使用__unsafe_unretained,它做同样的事情,但故意听起来更可怕。
    • 虽然答案对弱引用和强引用有明确的解释,但我仍然无法理解我们为什么使用 assign ?
    【解决方案2】:

    assign 类似于weak,但是当它离开堆时指针没有归零。所以,它不如weak 安全。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      • 2011-05-31
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 2018-11-17
      • 2011-06-22
      相关资源
      最近更新 更多