3

我有几个问题。

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

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

4

2 回答 2

27

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

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

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

于 2012-10-12T14:30:57.053 回答
8

assign就像weak但是当它离开堆时指针没有归零。所以,它不如weak.

于 2013-02-20T09:03:05.303 回答