我几乎没有问题。
1)其中assign属性将占用内存,因为我们不需要释放以减少引用计数?
2)自动归零参考和非自动归零参考有什么区别?它是如何工作的?如何记忆?
答案 0 :(得分:23)
弱适用于对象(它们具有引用计数和所有内容),但弱引用不会增加引用计数。但是,一旦对象被释放(从代码中的任何位置),对该对象的任何弱引用都将设置为nil
。这非常有用,因为如果只使用强引用和弱引用,则无法使用无效指针(指向已经解除分配的对象的指针)。
assign 与引用完全没有关系,它通常用于int,float和其他非对象类型。您当然可以为这样的变量分配一个对象引用,但是如果该对象被释放,您仍然会有一个指向它的内存的指针(现在它是垃圾,当你使用它时会伤到你)。
您对“内存使用”的担忧很奇怪 - 引用不占用内存,对象可以。但是如果要使用它,则无法释放对象。初学者的简单规则是:对于对象,尽可能使用强引用。当您有理由不使用强引用时,请使用weak(通常用于委托和数据源)。对于原始类型(int,float,CGRect,...),请使用assign,因为它们不是对象。
答案 1 :(得分:7)
assign
与weak
类似,但指针在离开堆时没有归零。所以,它不如weak
安全。