gpt4 book ai didi

iphone - 使用 View Controller 中的 socket 和属性进行内存管理

转载 作者:行者123 更新时间:2023-12-03 21:22:10 25 4
gpt4 key购买 nike

嘿伙计们,很抱歉再次打败了内存管理(死)马。我知道这个问题已经被问过好几次了,但我觉得所有的线索仍然缺乏两条信息。让我介绍一下我所知道的,以节省大家一些时间。

1) 当您创建 IBOutlet 时,您的 View Controller 会自动保留此 socket 。

1a)当您不创建 socket 时,“框架”( Nib ?)会为您释放您的对象(例如 uilabels 或 uiviews)。

2) 当你执行 self.myOutlet = nil 时,你有效地释放了一个 socket (前提是你已经正确地综合了你的属性)。这是因为 setter 释放了outlet并将其赋值为nil。

我不知道的是:

1) 主要问题:如果你在 viewDidUnLoad 中做了 self.myOutlet = nil ,你还需要在 dealloc 中做任何事情吗?您可以假设 viewDidUnload 总是在 dealloc 之前调用吗?(因此您保留的 View 被释放?)

2) 如果您不为该 channel 综合属性,会发生什么?框架不应该自动释放它吗?(因为你没有保留属性)如果你必须释放它,你如何做以及在哪里(在 viewDidUnload 或 dealloc 中)?

如果有什么不对的地方,请指出。任何澄清都会非常有帮助。

最佳答案

(#1) Apple 文档说两者都要做

In addition, because of a detail of the implementation of dealloc in UIViewController, you should also set outlet variables to nil in dealloc:

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmNibObjects.html

(#2) 如果您不综合属性,您仍然需要创建一个属性,并且最好保留它 - 阅读链接。 UI 对象被创建、自动释放,并且 socket 属性被设置(应该保留)。没有需要您发布的版本,因为他们已经完成了应该执行的版本 - 您保留了,因此您必须发布(在 viewDidUnload 和 dealloc 中)

关于iphone - 使用 View Controller 中的 socket 和属性进行内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3672695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com