【问题标题】:Objective-c : Accessing variadic arguments in method [duplicate]Objective-c:访问方法中的可变参数[重复]
【发布时间】:2012-09-29 09:26:18
【问题描述】:

可能重复:
How to create variable argument methods in Objective-C
Variable number of method parameters in Objective C - Need an example

以下是具有可变参数的方法示例。

- (void)numberOfParameters:group,... {
    NSLog(@"%@",group);
}

在上述方法中,我知道要访问第一个可变参数。 你能帮我访问其他的吗?

我正在浏览 ObjC.pdf,我正在阅读第 35 页和第 4 行

【问题讨论】:

标签: objective-c c function methods variadic-functions


【解决方案1】:

看到这个几乎相同的question

-(void)yourMethods:(id)string1, ...{

    NSMutableArray *arguments=[[NSMutableArray alloc]initWithArray:nil];
    id eachObject;
    va_list argumentList;
    if (string1) 
    {
        [arguments addObject: string1];
        va_start(argumentList, string1); 
        while ((eachObject = va_arg(argumentList, id)))    
        {
             [arguments addObject: eachObject];
        }
        va_end(argumentList);        
     }
    NSLog(@"%@",arguments);
}

最后用 nil 参数调用它:

[object yourMethods:arg1,arg2,arg3,nil];// object can be self

【讨论】:

  • 需要注意的是,这个方法需要一个nil作为最后的参数,否则会在参数结束时导致分段错误。
  • 它应该被称为 [object yourMethods:arg1,arg2,arg3,nil];但由于提问者只是问如何访问这些方法,我没有提到如何调用该方法......但正如你在评论中提到的那样,我已经在我的回答中添加了它......干杯
【解决方案2】:

一:它们不称为“组参数”(据我所知),而是可变参数。

二:C 标准库头文件 stdarg.h 提供了用于此目的的数据类型和宏(这就是为什么我通常建议在制作 The Best iPhone App Ever (TM) 之前先掌握普通的 ANSI C 的原因...)

#include <stdarg.h>

- (void)numberOfParameters:(int)num, ...
{
    int i;
    va_list args;
    va_start(args, num);

    for (i = 0; i < num; i++) {
        SomeType param = va_arg(args, SomeType);
        // do something with `param'
    }

    va_end(args);
}

这是关于此主题的rather good explanation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2014-08-03
    相关资源
    最近更新 更多