何时使用强或弱属性

时间:2012-07-07 08:36:49

标签: objective-c memory-management automatic-ref-counting declared-property

我有一个表格视图IBOutlet,默认情况下,XCode将其属性设置为strong而不是weak。有时我会收到一条“收到内存警告”的信息。信息。所以我尝试将许多属性从strong更改为weak,但它似乎不会影响流程并且事情顺利进行。我应该把插座设置为弱电,还是我错了?

最重要的是,我应该在nil方法中将{strong>所有属性设置为viewDidUnload,还是仅将IBOutlet s设置为<{1}}?

2 个答案:

答案 0 :(得分:1)

您应该在Strong中仅将nil属性设置为viewDidUnloadWeak如果目标对象已取消分配,属性将自动设置为Nil。

IBOutlet可根据要求设置为strongweak

对于您所面临的警告问题,您可以提供更多详细信息和代码吗?

除了Josh提供的链接外,还有很多与此主题相关的帖子,其中一些在下面:

weak or strong for IBOutlet and other

Objective-C declared @property attributes (nonatomic, copy, strong, weak)

详细解释如下:

http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1

关于这个主题的Apple文档可以在这里找到: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1

答案 1 :(得分:0)

&#34;当父级具有对子对象的引用时,您应该使用强引用。当一个孩子有一个对其父对象的引用时,你应该使用一个弱引用&#34;

通常,在处理内存周期时会使用弱引用。如果你使用strong,你需要在viewDidUnload中设置nil,因为如果你不这样做,在内存不足的情况下,你可能会导致意外泄漏。你不会在dealloc中释放它们,因为ARC会为你做这件事。 因为当目标对象被破坏时,这些值被自动设置为nil,因此不需要该处理。没有悬空指针了。