0

Big Nerd Ranch Guide 中的作业说:

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;

BNR项目.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];
}
4

1 回答 1

0

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

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


旁白:有些人(我就是其中之一)会告诉你不要在 中使用访问器方法init,但既然你只是在学习,那就按照书上的指示去做。我仅提供此作为进一步阅读材料。


*除了initWithCoder:, 对于任何在看的精确主义者。

于 2012-06-23T19:34:09.380 回答