如何在 iPhone / iPad 的应用程序中正确使用保留和释放

Posted

技术标签:

【中文标题】如何在 iPhone / iPad 的应用程序中正确使用保留和释放【英文标题】:how to use correctly retain and release in an app for iPhone / iPad 【发布时间】:2011-02-01 09:12:41 【问题描述】:

我是使用 Objective-C 为 iPhone / iPad 编程的新手。

我在释放或保留对象时遇到内存管理问题。 我正在做一个包含多个用于切换视图的视图控制器的应用程序。

大多数使用的对象都被声明为 IBOutlets,我想知道我应该如何以及何时使用 Retain 和 release 来避免内存问题并结束观察正确的应用程序。

在切换到另一个视图控制器或者我不必多次使用对象时释放它们会很有趣。

谁能解释我必须如何以及何时必须使用保留和释放?我已经阅读了 Apple 的文档,但我认为这有点令人困惑。我必须把它放在 dealloc 或 didReceiveMemoryWarning 中,但不能解决我的问题。

如果我犯了拼写错误,我很抱歉。 谢谢你。

【问题讨论】:

【参考方案1】:

要查找项目中的泄漏,请使用检测工具运行应用程序,或者通过 shift+command+A 从 xcode 中简单地运行应用程序。

你使用 alloc 和 init 的每个对象都应该被释放,否则会导致内存泄漏。 在 .h 文件中声明每个对象并设置属性并在 dealloc 方法中释放该 obj。

仅当您离开页面后必须保留当前状态时才需要保留。

【讨论】:

简短但很好解释和理解,谢谢!我会尝试看看它是如何工作的。【参考方案2】:

如果您将 copy mutablecopy retainalloc 发送到对象,那么您有责任在完成后释放该对象。

NSString *allocedString = [[NSString alloc] initWithString:@"world"];
NSString *myString = [NSString stringWithFormat:@"Hello%@", allocedString];

[allocedString release], allocedString = nil;

你有责任释放allocedString,但 myString(内部使用autorelease

【讨论】:

以上是关于如何在 iPhone / iPad 的应用程序中正确使用保留和释放的主要内容,如果未能解决你的问题,请参考以下文章

如何在调试期间在 iPad 中保持相同的 iPhone 应用程序尺寸

如何将ipad版本的应用程序转换为iphone版本?

如何使应用程序的设计与 iPhone4/iPhone5/iPad 兼容?有啥捷径吗?

如何支持适用于 iPhone、iPad 和 iPad Mini 的 iOS 应用程序

如何防止 iphone 的 jquery 移动应用程序在 ipad 中自动拉伸

在这种情况下,如何在 Flutter 中正确实现 FutureBuilder?