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更好地描述:空集合与空指针不同。存在需要区分的合法情况(例如,“有效但空数据”与“无效数据”)