gpt4 book ai didi

objective-c - Objective-C中调用指定初始化器后如何进行附加初始化? ( self = [ self ...)

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:04:18 25 4
gpt4 key购买 nike

假设我有一个指定的初始化程序,它会像这样进行一些初始化:

- (id)initWithBlah:(NSString *)arg1 otherBlah:(NSArray *)arg2
{
if (self = [super init])
{
...
}
return self;
}

我有另一个初始化器需要调用它,然后执行一些其他设置任务:

- (id)initWithSomeOtherBlah:(void *)creativeArg
{
// Is this right? It seems to compile and run as expected, but feels wrong
self = [self initWithBlah:nil otherBlah:nil];
if (self)
{
[self someProcessingForThisInitDependentOnSelfInit:creativeArg];
}

return self;
}

既然测试要确保返回值是正确的,那么在这种情况下应该使用'self'吗?我想知道这是否是事件的有效组合。我们有这样一种情况,我们有一个初始化程序需要在指定的初始化程序运行后执行一些额外的设置。

我想知道是否正确的方法是将这个额外的处理推到指定的初始化器中......

如果需要更多说明,请告诉我。我试图保持简单。 :)

谢谢!

最佳答案

我遵循的一般经验法则是指定初始化器是参数最多的初始化器,其他初始化器向下链接到指定初始化器。

在您的示例中,您没有在 initWithSomeOtherBlah 构造函数中使用 creativeArg。我不确定那是不是故意的。

通过这种方法,您可以在创建对象时明确表达自己的意图,而不是进行副作用编程。

例如:

@implementation BlaClass

- (id)initWithBlah:(NSString *)arg1 otherBlah:(NSArray *)arg2 creativeArg:(void *)arg3
{
if (self = [super init])
{
self.arg1 = arg1;
self.arg2 = arg2;
self.arg3 = arg3;
[self someProcessingForThisInitDependentOnSelfInit:arg3];
}
return self;
}


- (void)someProcessingForThisInitDependentOnSelfInit:(void *)creativeArg
{
if(creativeArg == NULL) return;


//do creative stuff
}

- (id)initWithSomeOtherBlah:(void *)arg
{
return [self initWithBlah:nil otherBlah:nil creativeArg:arg];
}

...
@end

关于objective-c - Objective-C中调用指定初始化器后如何进行附加初始化? ( self = [ self ...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11060865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com