【发布时间】:2011-11-10 12:27:53
【问题描述】:
维基百科指出“在计算机编程中,弱引用是一种不保护被引用对象不被垃圾收集器收集的引用”。这两种类型的引用在代码中看起来如何?弱引用是由自动发布的消息进行的引用吗?
【问题讨论】:
标签: iphone objective-c weak-references strong-references
维基百科指出“在计算机编程中,弱引用是一种不保护被引用对象不被垃圾收集器收集的引用”。这两种类型的引用在代码中看起来如何?弱引用是由自动发布的消息进行的引用吗?
【问题讨论】:
标签: iphone objective-c weak-references strong-references
弱引用是一种强度不足以强制对象保留在内存中的引用,而强引用则强制对象保留在内存中。
如果你创建了对任何变量的弱引用,你可能会得到 nil。
UITableViewDelegate、UIScrollViewDelegate 等都是弱引用的例子。
强引用示例:
MyClass *obj1 = [[Myclass alloc] init];
Myclass *obj2 = obj1;
这里obj2 强烈引用obj1 意味着如果您从内存中删除obj2,那么obj1 也会被删除。
【讨论】:
下面的回答是针对没有垃圾回收的情况(比如iOS)。
在垃圾回收的情况下,实际上有一个关键字(__weak)来创建弱引用。
“弱”引用是您不保留的引用。
您需要使用这些弱引用来分解循环。一个常见的情况是需要引用其父对象的子对象。在这种情况下,父对象将保留对子对象的引用,子对象具有对其父对象的引用,但不保留它。这是有效的,因为子对象只需要与父对象一样存在。
弱引用是由自动发布的消息进行的引用吗?
不是真的,那将是一个“非常弱的参考”;-)
当调用堆栈展开时(例如在每个事件循环结束时),自动释放的东西就会消失。如果您需要减少临时性的任何内容,则需要保留参考(或在上述情况下确保其他部分充分保留它)。
【讨论】:
weak 是否与assign 相同?