Open yaofly2012 opened 1 year ago
通过NSArray和NSMutableArray接口,返回的却是子类对象:
NSArray
NSMutableArray
__NSArrayI
__NSSingleObjectArrayI
__NSArrayM
不可变数组,内容不可改变。无法进行增加,删除操作。
@[]
NSArray *arr4 = @[@1, @2, @"12"];
nil
initWithObjects
NSArray *arr = [NSArray arrayWithObjects:@1, @2, @3, nil, @4, nil];
变量arr的值是[@1, @2, @3],nil后面的值都被忽略了。
arr
[@1, @2, @3]
[nil count]是0。如果要判断数组是否是空数组可以直接这样:
[nil count]
if(arr.count) { // 不必 if(arr && arr.count) // 非空数组 }
可变数组,继承于NSArray,对NSArray进行了增删改的扩充。
nil不能作为数组元素
NSMutableArray *mArr = [NSMutableArray arrayWithObjects:@1, @2, nil]; // 异常:uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil' [mArr addObject:nil];
for
for in
enumerateObjectsUsingBlock
enumerateObjectsWithOptions
enumerateObjectsAtIndexes
objectEnumerator
reverseObjectEnumerator
遍历的方式有多种,每种方式都存在即合理。至于选择哪种遍历方式完全取决个人需求。如果多个方式都满足需求可以基于性能选择。
OC数组的类体系
通过
NSArray
和NSMutableArray
接口,返回的却是子类对象:NSArray
对象时,实际上得到的是NSArray
的子类__NSArrayI
对象,只有一个对象的NSArray
时,得到的是__NSSingleObjectArrayI
类对象。NSMutableArray
对象,得到的同样是其子类__NSArrayM
对象。NSArray
不可变数组,内容不可改变。无法进行增加,删除操作。
基本语法
NSArray
,还可以用字面量@[]
方式创建NSArray
;NSArray *arr4 = @[@1, @2, @"12"];
nil
数组元素nil
不可以作为数组的元素。initWithObjects
里用nil
只是作为列表结束标记。变量
arr
的值是[@1, @2, @3]
,nil
后面的值都被忽略了。nil
数组[nil count]
是0。如果要判断数组是否是空数组可以直接这样:NSMutableArray
可变数组,继承于
NSArray
,对NSArray
进行了增删改的扩充。nil
nil
不能作为数组元素参考