我有一个表格视图IBOutlet
,默认情况下 XCode 将其属性设置为strong
而不是weak
. 有时我会收到“收到内存警告”消息。所以我尝试将许多属性从strong
to更改weak
,但它似乎并没有影响过程并且事情运行顺利。我应该将出口设置为弱,还是我错了?
最重要的是,我应该在方法中设置所有属性,还是只设置s?nil
viewDidUnload
IBOutlet
我有一个表格视图IBOutlet
,默认情况下 XCode 将其属性设置为strong
而不是weak
. 有时我会收到“收到内存警告”消息。所以我尝试将许多属性从strong
to更改weak
,但它似乎并没有影响过程并且事情运行顺利。我应该将出口设置为弱,还是我错了?
最重要的是,我应该在方法中设置所有属性,还是只设置s?nil
viewDidUnload
IBOutlet
您应该只将Strong
属性设置为nil
in viewDidUnload
。Weak
如果目标对象被释放,属性会自动设置为 Nil。
IBOutlet
可以根据需要设置strong
或设置weak
。
对于您面临的警告问题,您能否提供更多详细信息和代码?
除了 Josh 提供的链接外,还有很多与此主题相关的 SO 帖子,其中一些如下:
Objective-C 声明的@property 属性(非原子、复制、强、弱)
可以在这里找到很好的详细解释:
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
“当父对象引用子对象时,应使用强引用。当子对象引用其父对象时,应使用弱引用”
通常,在处理内存周期时会使用弱引用。如果你使用 strong 你需要在 viewDidUnload 中设置 nil 因为如果你不这样做,在内存不足的情况下,你可能会导致意外的泄漏。您不会在 dealloc 中释放它们,因为 ARC 会为您完成。相反,weak 不需要这种处理,因为当目标对象被销毁时,这些值会自动设置为 nil。不再有悬空指针。