美文网首页
iOS 中 一个 打印的情况

iOS 中 一个 打印的情况

作者: 天空中的球 | 来源:发表于2016-10-21 19:42 被阅读410次

    今天遇到一个 array的 问题, 觉的蛮有意思的,情况是获取不到array.lastObjectarray.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分别对应ImmutableMutable(后面的I和M的意思)。

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

    然后回过头去看,<extracting data from value failed> 通常这个是只 在 release 下才会产生的。

    立马点击 Edit Scheme 看看 run

    Xcode 中 Edit Scheme 中的run

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

    Xcode 中 Edit Scheme 中的 Analyze

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

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

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

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

    相关文章

      网友评论

          本文标题:iOS 中 一个 打印的情况

          本文链接:https://www.haomeiwen.com/subject/tmjcuttx.html