3

例如在内存不足的情况下。我正在阅读第三方代码,我看到了这个

NSMutableArray *array = [NSMutableArray array];

if (array != nil) {

    [array addObject:anObject];
}

在以这种方式创建数组之后,我从来没有检查过这个,alloc+init但现在我很怀疑。

4

3 回答 3

4

是的。除非方法另有说明,否则由于任何原因失败的对象实例化应返回 nil。

于 2013-05-14T11:00:32.290 回答
4

从技术上讲,它可以返回nil

那时发生这种故障的可能性极小。在返回a 之前,您的应用程序可能会崩溃或中止nilmalloc认为它与返回一样不可能NULL

我的实现多年来一直使用检查对象创建——我不记得 在那段时间在开发/测试中看到过[NSMutableArray array]回报。nil

请注意,此答案特定于[NSMutableArray array],而不是存在的任何/每个初始化程序/构造函数。[NSMutableArray array]在这方面,它几乎是最“一致”的初始化器/构造器类,因为在正常情况下它没有理由失败。

于 2013-05-14T11:06:10.853 回答
0

不需要那个nil检查。[NSMutableArray array]很少返回 nil。如果它遇到此方法返回的(内存)情况nil,您的应用程序就像被杀死一样好。

该方法失败的唯一可能情况是在内存紧张的情况下。iOS 永远不会让内存下降那么多,之前没有做足够的操作,比如内存警告和清除后台应用程序。

同样在您的示例代码中,即使 array is nil,您也不需要检查 nil,因为方法调用nil被忽略。我只是在谈论您的示例代码。

于 2013-05-14T10:59:23.720 回答