firstObject 和 objectAtIndex:0 之间的 NSArray 区别
NSArray difference between firstObject and objectAtIndex:0
在下面的示例中,数组 objectAtIndex:0 崩溃但 firstObject 产生了一个 nil 值。为什么会这样?
NSArray *array = [NSArray new];
id obj1 = [array firstObject]; // this is giving nil value
id obj2 = [array objectAtIndex:0]; // this line crashes
因为它们的工作方式和记录方式不同。它明确指出这就是它们的工作方式。 firstObject
在 Obj-C 世界中是 'safe' 因为它会 return nil
并且如果无事可做,则无操作。
使用 firstObject 是系统定义的 API,如果有 none,则 returns 为零。但是,如果您尝试访问 objectAtIndex,它将给出 NSRange 异常并且应用程序将崩溃。
在框架中,对于 firstObject 方法,可能会检查数组是否为空,然后 return nil。但是对于 objectAtIndex: 将尝试在给定索引处获取对象,并且由于数组为空,因此它崩溃给出了超出范围的原因。
这是一个 iOS7 功能
5. Implementation of -[NSArray firstObject]
NSArray *arr = @[];
// Before iOS7
id item = [arr count] > 0 ? arr[0] : nil;
// After iOS7
id item = [arr firstObject];
[array firstObject]
和array[0]
有很大区别。第一个 firstObject
nil 和第二个在数组为空时抛出异常。假设 firstObject 的工作方式类似于 lastObject
作为程序员的角度来看,崩溃不是什么好事,所以还是用firstObject
.
比较好
在下面的示例中,数组 objectAtIndex:0 崩溃但 firstObject 产生了一个 nil 值。为什么会这样?
NSArray *array = [NSArray new];
id obj1 = [array firstObject]; // this is giving nil value
id obj2 = [array objectAtIndex:0]; // this line crashes
因为它们的工作方式和记录方式不同。它明确指出这就是它们的工作方式。 firstObject
在 Obj-C 世界中是 'safe' 因为它会 return nil
并且如果无事可做,则无操作。
使用 firstObject 是系统定义的 API,如果有 none,则 returns 为零。但是,如果您尝试访问 objectAtIndex,它将给出 NSRange 异常并且应用程序将崩溃。
在框架中,对于 firstObject 方法,可能会检查数组是否为空,然后 return nil。但是对于 objectAtIndex: 将尝试在给定索引处获取对象,并且由于数组为空,因此它崩溃给出了超出范围的原因。
这是一个 iOS7 功能
5. Implementation of -[NSArray firstObject]
NSArray *arr = @[];
// Before iOS7
id item = [arr count] > 0 ? arr[0] : nil;
// After iOS7
id item = [arr firstObject];
[array firstObject]
和array[0]
有很大区别。第一个 firstObject
nil 和第二个在数组为空时抛出异常。假设 firstObject 的工作方式类似于 lastObject
作为程序员的角度来看,崩溃不是什么好事,所以还是用firstObject
.