加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 如何将来自method1的可变数量的参数传递给method

发布时间:2020-12-16 05:29:51 所属栏目:百科 来源:网络整理
导读:假设我们有方法: -(instancetype) initWithElements:(id)firstElement,... NS_REQUIRES_NIL_TERMINATION;+(instancetype) objWithElements:(id)firstElement,... NS_REQUIRES_NIL_TERMINATION; 我明白,如何在-initWithElements中使用可变数量的参数,但是我
假设我们有方法:
-(instancetype) initWithElements:(id)firstElement,... NS_REQUIRES_NIL_TERMINATION;
+(instancetype) objWithElements:(id)firstElement,... NS_REQUIRES_NIL_TERMINATION;

我明白,如何在-initWithElements中使用可变数量的参数,但是我不明白如何将变量从-objWithElements传递给-initWithElements :.

我的意思是,我想写一些像:

+(instancetype) objWithElements:(id)firstElement,... NS_REQUIRES_NIL_TERMINATION {
    return [[[self] initWithElements:ELEMENTS] autorelease];
}

甚至有可能吗

我看到的问题的唯一解决方案是将参数存储在数组中,并使用具有给定数组的init对象的帮助方法.

解决方法

不,在C(和Objective-C)中,不可能传递可变参数.

惯用的解决方案是让一个初始化器接受va_list,使其成为指定的初始化程序,然后从其他方法调用它.从一个可变的方法,这将看起来像:

- (instancetype)initWithVarargs:(id)first,...
{
    va_list args;
    va_start(args,first);
    id obj = [self initWithFirst:first VAList:args];
    va_end(args);
    return obj;
}

这是一个指定的初始化程序,它使用va_list参数:

- (id)initWithFirst:(id)first VAList:(va_list)args
{
    id obj;
    while ((obj = va_arg(args,id)) != nil) {
        // do actual stuff
    }
    // the return self,etc.
}

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读