1.如果array是immutable类型的NSArray
- copy只是retain,没有创建新对象
- arrayWithArray 创建了新的NSArray对象,并将原有数组元素填充进去,数组元素还是原来的对象
上代码验证:
NSArray *array = @[@"1",@"2"];
NSArray *copyArray = [array copy];
NSArray *arrayWithArray = [NSArray arrayWithArray:array];
控制台输出结果:
(lldb) po array
<__NSArrayI 0x1d003e3c0>(
1,
2
)
(lldb) po copyArray
<__NSArrayI 0x1d003e3c0>(
1,
2
)
(lldb) po arrayWithArray
<__NSArrayI 0x1d003e440>(
1,
2
)
如果是array ==nil,控制台输出:
(lldb) po array
nil
(lldb) po copyArray
nil
(lldb) po arrayWithArray
<__NSArray0 0x1d4009620>(
)
2.如果array是mutable类型的NSArray
二者最终结果是等效的,创建了新的NSArray对象,但数据元素还是原来的对象
- 如果array == nil,copy的结果是nil
- arrayWithArray 结果是长度为0的NSArray对象
上代码验证:
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1",@"2", nil];
NSArray *copyArray = [array copy];
NSArray *arrayWithArray = [NSArray arrayWithArray:array];
控制台输出:
(lldb) po array
<__NSArrayM 0x1d064c3c0>(
1,
2
)
(lldb) po copyArray
<__NSArrayI 0x1d0225900>(
1,
2
)
(lldb) po arrayWithArray
<__NSArrayI 0x1d022e5a0>(
1,
2
)