0

遵循 big nerd ranch ios 编程书,注意到除了我的 dateCreated var 之外,我的所有实例变量都声明了 getter 和 setter:

#import <Foundation/Foundation.h>

@interface BNRItem : NSObject
{
    NSString *itemName;
    NSString *serialNumber;
    int valueInDollars;
    NSDate *dateCreated;
}

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

- (void)setItemName:(NSString *)str;
- (NSString *)itemName;

- (void)setSerialNumber:(NSString *)str;
- (NSString *)serialNumber;

- (void)setValueInDollars:(int)i;
- (int)valueInDollars;

- (NSDate *)dateCreated;

@end

NSDate 有什么特别之处以至于它不需要声明 setter?

同样在我的实现文件中,我为什么能够调用 dateCreated 并将其存储在没有指定类型的变量中?

它是如何设置的?还是首先打电话?我敢肯定有什么在后台发生。我查看了 NSDate 对象的信息,但我仍然很困惑。

//implementation of the designated initializer

- (id)initWithItemName:(NSString *)name
        valueInDollars:(int)value
          serialNumber:(NSString *)sNumber
{
    //call NSObject's (superclasses) initializer
    self = [super init];

    //give the new instance of bnritem some values for its instance variables
    [self setItemName:name];
    [self setValueInDollars:value];
    [self setSerialNumber:sNumber];
    dateCreated = [[NSDate alloc] init];

    //return the newly intialized object
    return self;
}

在试图快速浏览完这本书后,我决定从头开始,慢慢来,确保在移动之前我 100% 了解所有内容。我真的花了一整天的时间在这一章上,现在这是一个我似乎无法跨越的障碍。

希望你能帮忙。亲切的问候

4

2 回答 2

5

没有什么特别的NSDate。没有 setter 方法,因为该属性是公开只读的。它的值在内部设置一次,永远不会改变。如果您查看属性的名称,那么这是有充分理由的。

你不需要二传手。您可以直接设置实例变量。Setter 是一种构造,它允许您围绕实例变量的管理添加一些结构(例如验证传入值)。

于 2013-10-03T21:31:30.987 回答
1

在您的实现 BNRItem 中,您可以直接访问 BNRItem 变量。所以dateCreated = [[NSDate alloc] init]是正确的。您不能在 BNRItem 实现文件之外执行此操作。

于 2013-10-04T01:14:44.597 回答