gpt4 book ai didi

iphone - 指定初始化器

转载 作者:可可西里 更新时间:2023-11-01 06:19:53 29 4
gpt4 key购买 nike

-(id)initWithStrAndDate: (NSString *)inString date:(NSDate *)inDate
{
if (self = [super init])
{
[self setStr:inString];
[self setDate:inDate];
}
return self;
}

-(id)initWithStr: (NSString *)inString
{
return [self initWithStrAndDate:inString date:[NSDate date]];
}

-(id)init
{
return [self initWithStr:nil];

我不确定我是否知道如何使用“指定初始化器”。首先不是

return [self initWithStrAndDate:inString date:[NSDate date]];

这错了吗?这不应该是:

return [self initWithStrAndDate:inString date:nil];

还有为什么我们要使用 3 种不同的初始化器?我的意思是我们什么时候使用“-(id)init”或“-(id)initWithStr: (NSString *)inString”或第一个?

最佳答案

当一个类有多个初始化器时,其中一个或有时多个初始化器被定义为指定初始化器 - 这些初始化器必须完全初始化类并且调用一个指定初始化器父类(super class),以便它完全初始化。

其他初始化器称为辅助初始化器必须通过调用self,最终调用指定的初始化器之一。 (参见 Cocoa Fundamentals - Multiple initializers。)

此模型有两个主要结果:

  • 避免代码重复和相应的错误;对于大多数类,一个初始化程序完成所有工作;和
  • 当创建子类时,您只需要重写父类(super class)的指定初始化器和原始方法(与指定初始化器等效的非初始化器方法),因为父类(super class)的所有其他方法最终都会结束调用这些。如果您需要更改行为,您当然可以覆盖更多方法并且必须这样做(再次参见 Cocoa Fundamentals - Multiple initializers。)

因此您的示例是正确的 - 1 个指定初始化器和 2 个辅助初始化器,它们通过调用 self 来调用指定初始化器。

关于iphone - 指定初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9055113/

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