Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 我是否应该始终检查[[NSArray alloc]init…;]是否返回nil?_Objective C_Ios_Cocoa_Collections_Nsarray - Fatal编程技术网

Objective c 我是否应该始终检查[[NSArray alloc]init…;]是否返回nil?

Objective c 我是否应该始终检查[[NSArray alloc]init…;]是否返回nil?,objective-c,ios,cocoa,collections,nsarray,Objective C,Ios,Cocoa,Collections,Nsarray,我是否应该始终检查[[NSArray alloc]init…](或任何其他集合类)是否返回nil?苹果文档称,如果分配或初始化失败,对象可能返回nil。我不知道初始化什么时候会因为NSArray而失败,但我猜分配可能会因为内存不足而失败。因为我正在为iOS开发,这可能会成为一个常见的问题。每次我想创建一个新的数组时,我都必须对此进行检查,还是我的应用程序会因为内存限制而失败(当然,假设是最坏的情况),而检查nil只是浪费周期 目前,我只在分配具有较大预定容量的可变集合(例如,[NSMutable

我是否应该始终检查
[[NSArray alloc]init…]
(或任何其他集合类)是否返回
nil
?苹果文档称,如果分配或初始化失败,对象可能返回
nil
。我不知道初始化什么时候会因为
NSArray
而失败,但我猜分配可能会因为内存不足而失败。因为我正在为iOS开发,这可能会成为一个常见的问题。每次我想创建一个新的数组时,我都必须对此进行检查,还是我的应用程序会因为内存限制而失败(当然,假设是最坏的情况),而检查
nil
只是浪费周期

目前,我只在分配具有较大预定容量的可变集合(例如,
[NSMutableArray arrayWithCapacity:1000]
)或具有大量对象的不可变集合(超过1000个)时进行检查


谢谢。

不,不用
NSArray
NSArray
是一个使用structs的链表,因此它不会
malloc
太多的幕后操作。至少用
NSArray
检查nil是毫无意义的

但是,如果您使用的是cocos2d中的收集类,如
CCArray
,那么使用大型数组检查nil可能会很有帮助

尽管如此,iOS上指针的大小是8字节,即使是1000个元素的C数组也只有8KB的RAM。在大多数情况下,您将不会使用足够的内存,导致内存耗尽


还要注意的是,如果应用程序内存不足,有许多委托方法可以注册,以获得警告并修复此问题。

@jrturton我想你是想对我的问题发表评论。是的,我现在意识到这是多么毫无意义,但我认为我的意图仍然很清楚。我编辑了这个问题-pNSArray是一个对象类(实际上是幕后的一组类)。数组可以由链表支持,也可以由C数组或其他集合支持。这是一个故意对您隐藏的实现细节。1000个8字节的元素是8KB,而不是8MB。@H2CO3
[NSArray new]
是无意义的,因为
NSArray
是不可变的。它不能更改,所以它只是一个空数组,这可以用nil.@RichardJ.RossIII更好地描述:空集合与空指针不同。存在需要区分的合法情况(例如,“有效但空数据”与“无效数据”)