gpt4 book ai didi

objective-c - 指定初始化器应该只调用 'super' 上的指定初始化器

转载 作者:太空狗 更新时间:2023-10-30 03:52:31 24 4
gpt4 key购买 nike

此代码是此处实现的有序字典的修改版本。 https://github.com/nicklockwood/OrderedDictionary/tree/master/OrderedDictionary

接口(interface) -> OrderedDictionary.h

 @interface OrderedDictionary : NSMutableDictionary
{
}

实现 -> OrderedDictionary.m

// This is the new method added.
- (instancetype)init
{
return [self initWithCapacity:0];
}

- (instancetype)initWithCapacity:(NSUInteger)capacity
{
self = [super init];
if (self != nil)
{
// Allocate here.
}
return self;
}

代码工作正常,但我在“- (instancetype)init”中收到以下警告。

  1. 指定的初始化程序应该只调用指定的初始化程序关于“ super ”
  2. 指定的初始化程序缺少对 a 的“ super ”调用父类(super class)的指定初始化器

我做错了什么,我该如何解决?

对代码进行了以下更改以解决问题

 // This is the new method added.

- (instancetype)init
{
self = [super init];
if (self != nil)
{
// Allocate here.
}
return self;
}

- (instancetype)initWithCapacity:(NSUInteger)capacity
{
self = [super initWithCapacity:capacity];
if (self != nil)
{
// Allocate here.
}
return self;
}

最佳答案

尝试添加 - (instancetype)initWithCapacity:(NSUInteger)capacity NS_DESIGNATED_INITIALIZER;

到@interface block 。所有初始化路径都应流经指定的初始化程序 - 在您的情况下 initWithCapacity: 是显而易见的选择,因为 init 调用它。您可能仍然会遇到问题,指定构造器必须调用父类(super class)的指定构造器。如果父类(super class)定义了指定的初始化器,那么您的类也必须实现这些初始化器...

一般来说,子类化 NSMutableDictionary 被认为是不好的做法,因为 NSMutableDictionary 是类集群中面向公众的部分。这可能是编译器警告的部分原因。

关于objective-c - 指定初始化器应该只调用 'super' 上的指定初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29349176/

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