gpt4 book ai didi

ios - 在 Objective-C 中创建初始化器

转载 作者:行者123 更新时间:2023-12-01 18:14:08 24 4
gpt4 key购买 nike

我正在阅读的书中前面的说明是为 BNRItem 类创建一个指定的初始化程序,这本书引导我完成了:

BNRItem.h

// Designated initializer for BNRItem
- (instancetype)initWithItemName:(NSString *)name
valueInDollars:(int)value
serialNumber:(NSString *)sNumber;


BNRItem.m

- (instancetype)initWithItemName:(NSString *)name
valueInDollars:(int)value
serialNumber:(NSString *)sNumber {
// Call the superclass's designated initializer
self = [super init];

// Did the superclass's designated initializer succeed?
if (self) {
// Give the instance variables initial values
_itemName = name;
_serialNumber = sNumber;
_valueInDollars = value;

// Set _dateCreated to the current date and time
_dateCreated = [[NSDate alloc] init];
}
// Return the address of the newly created initialized object
return self;
}
这本书还解释了从 BRNItem 的父类(super class)继承的 init 方法以及如何覆盖该方法:
BNRItem.h

-(instancetype)init {
return [self initWithItemName:@""];
}
现在,我正在完成本章末尾的挑战,我有一种感觉,我让这变得比它需要的更复杂。挑战内容如下:
白银挑战:另一个初始化器
“为 BNRItem 类创建另一个初始化器方法。此初始化器不是 BNRItem 的指定初始化器。它采用标识项目的 itemName 的 NSString 实例和标识序列号的 NSString 实例。”
摘自:乔·康威。 “iOS 编程。”电子书。 https://itun.es/us/Zni-W.l
下面是我创建的代码:
BNRItem.h

// Another initializer
- (instancetype)initWithItemName:(NSString *)name
serialNumber:(NSString *)sNumber;


BNRItem.m

- (instancetype)initwithItemName:(NSString *)name
serialNumber:(NSString *)sNumber {
return [self initwithItemName:name
serialNumber:@""];
我的解决方案正确吗?

最佳答案

我们指定了一个指定的初始化器来扩展父类(super class),所有其他的初始化器都调用这个指定的初始化器。指定初始化器的目的是:

  • 确保类在创建后。
  • 避免重复代码。我们有一个初始化器执行配置,其他初始化器通过传递参数来调用它。

  • 如果有意义的话,我们可以让指定的初始化程序是私有(private)的(通过从头文件中删除它)并且只公开更简单的初始化程序。例如,当某些参数可能为 nil 时,而不是让用户猜测这是否有效,我们可以提供一个只包含用于该用途的参数的初始化程序。

    您所有的非指定初始化程序都将调用指定初始化程序。指定的初始化程序应该公开所有情况的可配置参数。

    关于ios - 在 Objective-C 中创建初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24421031/

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