我想对 init 标头中具有省略号语法的对象进行子类化。 IE。
-(void) initObjectWith:(NSString*)argument arguments:(NSString*)someArgument,...;
我不确定在这种情况下如何传递参数数组。我怀疑它会是这样的:
- (void) initObjectWithCustomInitializer:(NSString*)argument additionalArgument:(NSString*)additionalArgument argument:(NSString*) someArgument,... {
self = [super initObjectWith:argument arguments:someArgument,...];
if (self) {
//custom init code here
}
return self
}
这可以编译,但以 nil 结尾的“arguments”数组仅获取第一个参数。如何传递以 nil 结尾的数组的对象?
声明该可变参数初始值设定项的超类should还声明一个非可变参数,它需要va_list
(类似于如何printf
has vprintf
, 例如)。假设这种情况,超类同时具有:
-(void)init:(id)a arguments:(id)b, ...;
and
-(void)init:(id)a arguments:(id)b variadicArgs:(va_list)args;
你会做类似的事情:
- (void)myInit:(id)a newArg:(id)c arguments:(id)b, ...
{
va_list v;
va_start(v, b);
self = [super init:a arguments:b variadicArgs:v];
if (self) {
//custom init code here
}
va_end(v);
return self;
}
当然,您应该确保您的新初始化器也有一个非可变版本!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)