Objective c NSArray文本构造函数的选择器名称,如@[]?
自从Clang为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
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-但是大多数数组和字典构造函数并不像看上去那样。不同的构造器会被使用,例如,一个全文字数组和一个动态创建元素的数组。这意味着它是一个方便的表单,但可以转换为其他形式。所使用的精确构造函数或类集群对象通常是不相关的,并被视为不相关的。