iphone - 在 Objective C 中检查内存分配的正确方法

标签 iphone objective-c memory ios memory-management

我想知道在 Objective C 中执行分配内存的命令后正确的方法是什么(我主要指的是 iOS 应用程序)。 我的困境来自这样一个事实,即检查内存分配操作的成功或失败会增加很多代码行,同时想知道这是否有用。 此外,有时内存分配是显而易见的,例如使用“alloc”,但有时它们是在幕后发生的。即使我们检查每一个分配——当我们发现它失败时——我们实际上也无能为力。所以也许正确的方法是让它失败并让应用程序崩溃? 看看这段代码:

// Explicit memory allocation
NSArray a1 = [[NSArray alloc] initWithObjects:someObj, nil];
if (!a1) {
  // Should we make this check at all? Is there really what to do?
}

// Implicit memory allocation
NSArray a2 = [NSArray arrayWithObjects:someObj, nil];
if (!a2) {
  // should we make this check at all? Is there really what to do?
}

您认为正确的做法是什么?检查或不检查分配失败?那里的 iOS 开发者 - 你是如何在你的应用中处理它的?

最佳答案

幻想:每个内存分配都会被检查,任何失败都会以友好的方式报告给用户,应用程序会干净地关闭,错误报告会被发送,你可以修复它[在那种情况下],下一个版本将是完美的。

现实:当像arrayWithObjects: 这样微不足道的事情失败时,您的应用程序早就死了。在这种情况下没有恢复。很可能框架已经分配失败并且已经破坏了您的应用程序的状态。

此外,一旦像 arrayWithObjects: 这样基本的东西失败了,您无论如何都无法告诉用户。如果没有进一步的分配,您将无法在屏幕上可靠地放置对话框。

但是,在您的应用分配失败之前,失败发生得更远。也就是说,您的应用应该已收到内存警告,并且应该通过 (a) 保持状态以便不会丢失客户数据以及 (b) 释放尽可能多的内存以避免灾难性故障做出响应。

内存警告仍然是内存使用 war 中最后一道可行的防线。

您对减少内存的第一次攻击是在设计和开发过程中。您应该从应用程序开发过程的开始就考虑内存使用,并且您必须在完善您的应用程序以便发布时优化内存使用。使用 Allocations Instrument(参见这个 Heapshot analysis write-up 我之前做过 -- 它非常适用)并证明每个主要内存消费者的存在。

关于iphone - 在 Objective C 中检查内存分配的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4577821/

相关文章:

iOS 7 通知中心未调用

iphone - IOS 中 UITableView 收到内存警告

iphone - 我怎样才能得到自己的手机号码?

iOS Objective-C 低延迟音频播放,如 SoundPool

c++ - 内存调试策略

c - 嵌入式系统中的内存使用

ios - 流式传输时 iPhone 6S 出现音频问题

IOS 8 NSLocationAlwaysUsageDescription 自定义翻译

iphone - 视频模式下录制的快门声(叮)

Linux:手动减小堆大小