iOS 中 一个 打印的情况

今天遇到一个 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等同于打印对象的指针,所以有问题。 **

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,196评论 6 13
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,387评论 0 6
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,219评论 30 472
  • 出发:小美是一名新来的实习生。考研成功后,为打发研究生开学前的漫长时光,来到了厦门翔安一家上市公司的研究院检测部实...
    tongmiao阅读 301评论 0 1
  • “类族”是一种很有用的模式,可以隐藏“抽象基类”背后的实现细节,OC系统框架中普遍使用此模式。比如UIKit中就有...
    名扬丶四海阅读 412评论 0 1