为什么在声明setter和getter时我不需要为NSDate对象的实例声明一个setter?

Lon*_*Guy 0 cocoa cocoa-touch objective-c

继大书呆子牧场ios编程书和注意到的getter和setter已经为我的所有实例变量声明了除了我的dateCreated var:

#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
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

在试图匆匆通过这本书之后,我决定从头开始花时间并确保在移动之前100%理解所有内容.我真的花了整整一天的时间来完成这一章,现在这是一个我无法跨越的障碍.

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

Wai*_*ain 5

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

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