dealloc 和 viewdidunload 有什么区别?

发布于 2024-11-16 11:27:21 字数 108 浏览 3 评论 0原文

我什么时候应该释放我在程序中分配的所有内存?

因为我只有一个 viewDidLoad 方法来处理我的业务。我应该将 dealloc 留空并仅在 viewDidUnload 中进行清理吗?

When should I release all the memory I allocated in my program?

Because I only have a viewDidLoad method where I do my business. Should I leave dealloc empty and cleanup only in viewDidUnload?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苏别ゝ 2024-11-23 11:27:21

当对象准备好被释放时(即,当对象的保留计数变为0时),使用“dealloc”。 viewDidUnload 在视图卸载时被调用,但它可能不会立即释放,因为 UIViewController 的引用仍然由一些其他对象存储。

我个人的偏好是,对于“init”创建的对象,它们由“dealloc”释放,对于“viewDidLoad”创建的对象,它们由“viewDidUnload”释放。

'dealloc' is used when the object is ready to be freed (i.e., when retain count of the object becomes 0). And viewDidUnload is called when the view is unloaded, but it may not be freed immediately as the reference of the UIViewController is still stored by some other objects.

my personal preference is, for ojbects created by 'init', they are freed by 'dealloc', for objects created by 'viewDidLoad', they are freed by 'viewDidUnload'.

断肠人 2024-11-23 11:27:21

正如 -viewDidUnload 的文档所述:

内存不足时调用
视图控制器时的条件
需要释放其视图和任何
与该视图关联的对象
释放内存。因为观
控制器通常存储对
视图和其他与视图相关的对象,
你应该使用这个方法
放弃这些对象的所有权
这样他们的记忆就可以
回收。你应该这样做只是为了
您可以轻松重新创建的对象
稍后,在您的 viewDidLoad 中
方法或从你的其他部分
应用。你不应该使用这个
释放用户数据或任何内容的方法
其他不能提供的信息
轻松重新创建。

通常,视图控制器存储
使用插座引用对象,
这是一个变量或属性
包含 IBOutlet 关键字并且是
使用 Interface Builder 配置。一个
视图控制器还可以存储
指向它创建的对象的指针
以编程方式,例如在
viewDidLoad 方法。首选方式
放弃任何物体的所有权
(包括奥特莱斯)是使用
相应的访问器方法
将对象的值设置为零。
但是,如果您没有
给定对象的访问器方法,
你可能必须释放该对象
明确地。

没有提到 -viewDidUnload 将在 -dealloc 中调用,您不应该依赖它。

As the documentation of -viewDidUnload says:

It is called during low-memory
conditions when the view controller
needs to release its view and any
objects associated with that view to
free up memory. Because view
controllers often store references to
views and other view-related objects,
you should use this method to
relinquish ownership in those objects
so that the memory for them can be
reclaimed. You should do this only for
objects that you can easily recreate
later, either in your viewDidLoad
method or from other parts of your
application. You should not use this
method to release user data or any
other information that cannot be
easily recreated.

Typically, a view controller stores
references to objects using an outlet,
which is a variable or property that
includes the IBOutlet keyword and is
configured using Interface Builder. A
view controller may also store
pointers to objects that it creates
programmatically, such as in the
viewDidLoad method. The preferred way
to relinquish ownership of any object
(including those in outlets) is to use
the corresponding accessor method to
set the value of the object to nil.
However, if you do not have an
accessor method for a given object,
you may have to release the object
explicitly.

There is no mention -viewDidUnload will call in -dealloc, you shouldn't rely on it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文