我想知道在 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/