Ios [NSMutableArray]能否返回nil?

Ios [NSMutableArray]能否返回nil?,ios,memory,nsmutablearray,Ios,Memory,Nsmutablearray,例如,在内存不足的情况下。我正在读第三方代码,我看到了这个 NSMutableArray *array = [NSMutableArray array]; if (array != nil) { [array addObject:anObject]; } 我从来没有用这种方法创建数组后检查过这个问题,也没有alloc+init,但现在我有点怀疑。没有必要进行nil检查[NSMutableArray]很少返回nil。如果该方法返回nil(内存)的情况下,你的应用程序就如同被杀死一样

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

NSMutableArray *array = [NSMutableArray array];

if (array != nil) {

    [array addObject:anObject];
}

我从来没有用这种方法创建数组后检查过这个问题,也没有
alloc+init
,但现在我有点怀疑。

没有必要进行
nil
检查
[NSMutableArray]
很少返回nil。如果该方法返回
nil
(内存)的情况下,你的应用程序就如同被杀死一样

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


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

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

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

在这一点上发生此类故障的可能性是难以置信的。在返回
nil
之前,您的应用程序可能会崩溃或中止。把它看作是不可能的,如<代码> MalOC/<代码>返回<代码> null < /C> > < /P> 我的实现多年来一直使用checked对象创建—我记不起在开发/测试期间曾见过
[NSMutableArray]
return
nil


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

我也看到,不检查nil将返回“无法识别的选择器”。我对此也感到困惑。您可以检查
[array count]!=0
如果(数组)
@hajder消息
nil
未因
发送到实例的无法识别的选择器而崩溃…
@H2CO3我记得定义类似[NSMutableArray]的数组会产生该错误。如果我可以复制,我会发布一个新的问题。你能给我链接一个资源/文档来检查吗?根据我的iOs开发经验,如果操作系统没有足够的内存来分配对象,应用程序将无法运行。内存警告和后台应用程序清除将已经完成,以避免这种情况。在任何情况下,在这种内存受限的情况下,nil检查都没有任何帮助。
NSMutableArray
可以由mutable
CFArray
实例支持
cfarray
由创建,可以返回
NULL
。我认为说
+[NSMutableArray]
从不返回
nil
是没有根据的:如果分配器失败(这可能不仅仅是因为内存不足),它可能会返回。但是没有检查
malloc()与此不同,NULL
总是不受欢迎。为什么?@H2CO3好问题:)最小的操作环境有虚拟内存和一块好的内存,系统能够杀死其他任务或你自己的任务,实现和客户端之间的抽象层数量?是的,也许吧。但是如果我不必每次都写自己的
safe_malloc(){return malloc()| | abort()}
,我会非常高兴的。。。(特别是在我的最新项目中,
malloc()
是一个瓶颈,我从来没有遇到过它返回
NULL
…)@H2CO3在这种情况下,至少您使用的是
malloc
,如果需要,您可以实现自己的分配器。检查malloc的一个很好的理由是还有一个额外的变量——size参数。这很有意义。是的,不能确定地分配任意大小的内存块。谢谢你的解释!