什么是__NSArrayI和__NSArrayM?如何转换为NSArray?

Cha*_*gUZ 34 iphone objective-c nsarray nsobject ios

什么是__NSArrayI和__NSArrayM?

__NSArrayI(或M)导致"无法识别的选择器"错误.

如何转换为NSArray?


我做了测试解析json,twitter api.

http://api.twitter.com/1/followers/ids.json?cursor=-1&screen_name=twitterapi

==>工作正常.解析对象是NSCFDictionary类.(这个字典包含__NSArrayM类)

http://api.twitter.com/1/statuses/user_timeline.json?&screen_name=twitterapi

==>错误.解析对象是__NSArrayM类.

Jas*_*son 76

__NSArrayI是一个不可变数组的代码字 - 也就是说,NSArray你不能改变的"常规" .

__NSArrayM是一个可变数组的代码字 - 也就是说,NSMutableArray.在NSMutableArray,您可以添加和删除项目.

  • 很好 - 你在哪里找到这方面的知识?通过直接读取运行时的源代码?或者某处有某种文档. (7认同)
  • 名称是一个很好的线索(数组上下文中的"M"和"I"并不意味着多但可变且不可变),但最好的方法是使用object_getClass()检查您知道为NSArrays的对象. (2认同)

Ale*_*Cio 5

这些是私人api的类.有一个项目,你可以看到私人api的所有类.您不允许在应用程序中使用它们,app store但有时它也很有用,看看如何访问对象以及它是什么类型的对象.他们无法转换.我认为,在调试器中获取这些类型的对象只是内部类的表示,对于您在项目中使用的类.了解它是什么类,让您也了解在代码中查找问题的位置.

在这里,您可以看到两者的简短查找:

__NSArrayI

在此输入图像描述

__NSArrayM

在此输入图像描述