Big Nerd Ranch回答,我是否正确宣布了这个初始化程序?

时间:2012-06-23 19:32:50

标签: objective-c ios

Big Nerd Ranch指南中的任务说:

Silver Challenge: Another initializer

Create another initializer method for BNRItem. 
This initializer is not the designated initializer of BNRItem. 
It takes an NSString that identifies the itemName of the item and an 
NSString that identifies the serialNumber.

我不确定我是否正确实施了它。这是对的吗?

BNRItem.h

- (id)initWithItemName:(NSString *)name
        valueInDollars:(int)value
          serialNumber:(NSString *)aNumber;

// I added this for new initializer
- (id)initWithItemName:(NSString *)name serialNumber:(NSString *)aNumber;

BNRItem.m

- (id)initWithItemName:(NSString *)name valueInDollars:(int)value serialNumber:(NSString *)aNumber
{
    self = [super init];

    if (self)
    {
        [self setItemName:name];
        [self setSerialNumber:aNumber];
        [self setValueInDollars:value];
        dateCreated = [[NSDate alloc] init];
    }

    return self;
}

// Added the implementation for the new initializer
- (id) initWithItemName:(NSString *)name serialNumber:(NSString *)aNumber
{
    return [self initWithItemName:name valueInDollars:0 serialNumber:aNumber];
}

1 个答案:

答案 0 :(得分:0)

是的,你已经明白了。做得好!

关键点是初始化器的链接,如Cocoa Fundamentals Guide(可能在BNR书中)中所述。类中的每个非指定初始化程序都应该调用类的指定初始化程序*,它应该调用超类的DI。


除此之外:有些人(我是其中之一)会告诉你not to use accessor methods in init,但是既然你刚刚学习,就按照这本书的方式告诉你。我提供此仅作为进一步的阅读材料。


* initWithCoder:除外,适用于任何正在寻找的确切人员。