Objective c NSArray文本构造函数的选择器名称,如@[]?

Objective c NSArray文本构造函数的选择器名称,如@[]?,objective-c,cocoa-touch,cocoa,nsarray,objective-c-literals,Objective C,Cocoa Touch,Cocoa,Nsarray,Objective C Literals,自从Clang为NSDictionary、NSArray、NSNumber和BOOL文本添加Objective-C文本语法以来已经有一段时间了,比如@[object1,object2,]或@{key:value} 我正在查找与数组文本关联的选择器名称,@[] 我尝试使用下面的代码查找NSArray,但没有找到一个似乎正确的选择器 unsigned int methodCount = 0; Method * methods = class_copyMethodList([NSArray cla

自从Clang为
NSDictionary
NSArray
NSNumber
BOOL
文本添加Objective-C文本语法以来已经有一段时间了,比如
@[object1,object2,]
@{key:value}

我正在查找与数组文本关联的选择器名称,
@[]

我尝试使用下面的代码查找
NSArray
,但没有找到一个似乎正确的选择器

 unsigned int methodCount = 0;
 Method * methods = class_copyMethodList([NSArray class], &methodCount);

 NSMutableArray * nameOfSelector = [NSMutableArray new];
 for (int i = 0 ; i < methodCount; i++) {
    [nameOfSelector addObject:NSStringFromSelector(method_getName(methods[i]))];
}
unsigned int methodCount=0;
方法*methods=class\u copyMethodList([NSArray class],&methodCount);
NSMUTABLEARRY*nameOfSelector=[NSMUTABLEARRY new];
对于(int i=0;i
@[]
不是NSArray上的方法,因此您无法在那里找到它

编译器只是将
@[]
转换为对
[NSArray arraywhithobjects:count:][/code>的调用。如中所示,它基本上查找所有的
@[]
,并将其替换为
[NSArray arraywhithobjects:count:://code>(当然要带参数)


请参见

@[]
使用
+数组,其中对象:计数:

数组文字表达式扩展为调用
+[NSArray arrayWithObjects:count://code>,这将验证所有对象是否为非nil。变量形式,
+[NSArray arrayWithObjects:
使用nil作为参数列表终止符,这可能导致数组对象格式错误

当你写这篇文章时:

NSArray *array = @[ first, second, third ];
它扩展到:

id objects[] = { first, second, third };
NSArray *array = [NSArray arrayWithObjects:objects count:(sizeof(objects) / sizeof(id))];

实际上,我怀疑使用了NSArray的一些“内部”接口。@HotLicks说它扩展到了
+[NSArray arrayWithObjects:count://code>,正如Jonathan所报告的那样。@Rob-但是大多数数组和字典构造函数并不像看上去那样。不同的构造器会被使用,例如,一个全文字数组和一个动态创建元素的数组。这意味着它是一个方便的表单,但可以转换为其他形式。所使用的精确构造函数或类集群对象通常是不相关的,并被视为不相关的。