今天遇到一个 array
的 问题, 觉的蛮有意思的,情况是获取不到array.lastObject
和 array.firstObject
的值, 直接返回:
<extracting data from value failed>
而直接通过array [0]
或者 [array objectAtIndex:array.count - 1]
又是可以正常返回的。
此时,我首先看 array 所有数据的打印:
是呈现下面这种情况下的:
<__NSArrayI 0x14fd04010>(
one,
two,
three,
four
)
而不是 想象中这种:
(
one,
two,
three,
four
)
此时就在想
<__NSArrayI 0x14fd04010>
这是什么情况,这里的__NSArrayI
或者__NSArrayM
分别对应Immutable
和Mutable
(后面的I和M的意思)。
此处是不可变的数组对象地址,那为什么打印会多处这样呢? 哦哦,整个运行中也是不报错的。
然后回过头去看,<extracting data from value failed>
通常这个是只 在 release 下才会产生的。
立马点击 Edit Scheme 看看 run
发现是 Debug 环境啊,后来一想,还有一个地方(Analyze)可能设置成 release 啦, 结果是 release。。。
然后改过来之后,还是有没有影响啊....
话说,取NSArray有两种方式,用array[0]
在数组为空的时候会报错,用[array firstObject]
即使数组为空,也不会报错,会返回nil。 他们两者的区别是一个取其对象,一个是取其指针...
最后回过头想懵逼啦,这些都是我在 日志处 po
出来的结果,当然是如此啦!
**po的作用为打印对象,我们可以通过它打印出对象,而不是打印对象的指针。而
po array.firstObject
等同于打印对象的指针,所以有问题。 **