iOS 中 一个 打印的情况

今天遇到一个 array的 问题, 觉的蛮有意思的,情况是获取不到array.lastObjectarray.firstObject 的值, 直接返回:

 

直接通过array [0] 或者 [array objectAtIndex:array.count - 1] 又是可以正常返回的

此时,我首先看 array 所有数据的打印:

是呈现下面这种情况下的:

<__NSArrayI 0x14fd04010>(
    one,
    two,
    three,
    four
)

而不是 想象中这种:

(
    one,
    two,
    three,
    four 
)

此时就在想 <__NSArrayI 0x14fd04010> 这是什么情况,这里的__NSArrayI或者__NSArrayM分别对应ImmutableMutable(后面的I和M的意思)。

此处是不可变的数组对象地址,那为什么打印会多处这样呢? 哦哦,整个运行中也是不报错的。

然后回过头去看, 通常这个是只 在 release 下才会产生的。

立马点击 Edit Scheme 看看 run

iOS 中 一个 打印的情况_第1张图片
Xcode 中 Edit Scheme 中的run

发现是 Debug 环境啊,后来一想,还有一个地方(Analyze)可能设置成 release 啦, 结果是 release。。。

iOS 中 一个 打印的情况_第2张图片
Xcode 中 Edit Scheme 中的 Analyze

然后改过来之后,还是有没有影响啊....

话说,取NSArray有两种方式,用array[0]在数组为空的时候会报错,用[array firstObject]即使数组为空,也不会报错,会返回nil。 他们两者的区别是一个取其对象,一个是取其指针...

最后回过头想懵逼啦,这些都是我在 日志处 po出来的结果,当然是如此啦!

**po的作用为打印对象,我们可以通过它打印出对象,而不是打印对象的指针。而 po array.firstObject等同于打印对象的指针,所以有问题。 **

你可能感兴趣的:(iOS 中 一个 打印的情况)