3

有可能以这种方式有一个方法:

[obj mergeObjs:obj1,obj2,obj3,nil];

或者以这种方式有一个方法:

[obj mergeObjs:obj1,obj2...obj(n),nil usingBlocks:blk1,blk2,blk3....blk(m),nil];

其中 n 可能等于或不等于 m。

基本上在单个方法声明中包含多个变量参数列表。?

这不是一个潜在的答案:

[obj merge:[NSArray arrayWithObjects:[NSArray arrayWithObjects:...,nil],[NSArray arrayWithObjects:...,nil]...,nil]];

提前致谢。

这是我为单变量参数列表找到的链接:

http://developer.apple.com/library/mac/#qa/qa1405/_index.html 如何在Objective-C中创建可变参数方法

4

3 回答 3

5

您无法使用可变长度的参数列表来实现这一点,但是您是否考虑过只传递两个数组?

[obj mergeObjs:(NSArray*)objs usingBlocks:(NSArray*)blocks];

现代版本的 clang(最近 Xcode 版本使用的 Objective C 编译器)甚至支持NSArray文字

[instance mergeObjs:@[obj1, obj2, obj3] usingBlocks:@[^{}, ...]];

(当然,确保适当地复制您的块以插入到 NSArray 中)。

于 2012-04-13T11:37:49.663 回答
4

不,消息分发归结为对objc_msgSend()(或其变体之一)的调用。这遵循 C 调用约定,并且无法在该约定中表达多变量参数列表。

于 2012-04-13T11:29:29.683 回答
0

根据响应和严重脱发得出结论 - 在方法声明中不可能有 2 个变量参数列表。

拥有 mulit-Variable-argument-list 的目的是在我的上下文中提供更多的可读性。

将与阵列凑合...叹息!!。

于 2012-04-15T06:13:49.727 回答