2

自从 Clang 为NSDictionaryNSArrayNSNumberBOOL文字添加 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]))];
}
4

2 回答 2

9

@[]不是 NSArray 上的方法,所以你不会在那里找到它。

编译器只是转换@[]为对[NSArray arrayWithObjects:count:]. 因为它基本上找到了所有的@[]并将其替换为[NSArray arrayWithObjects:count:](当然带有参数)

请参阅此处的文字部分

于 2014-05-04T01:09:54.593 回答
3

@[]用途+arrayWithObjects:count:

官方 Clang 文档

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

当你写这个:

NSArray *array = @[ first, second, third ];

它扩展为:

id objects[] = { first, second, third };
NSArray *array = [NSArray arrayWithObjects:objects count:(sizeof(objects) / sizeof(id))];
于 2014-05-04T07:28:29.770 回答