除了我的dateCreated var之外,我已经为所有的实例变量声明了大书呆子牧场ios编程书和注意到的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%理解所有内容。我真的花了整整一天在这一章,现在这是一个我无法跨越的障碍。
希望你能提供帮助。 亲切的问候
答案 0 :(得分:5)
NSDate
没有什么特别之处。没有setter方法,因为该属性是公开只读的。它的值在内部设置,一次,永不改变。如果你看一下属性的名称,那么就有充分的理由。
你不需要一个二传手。您可以直接设置实例变量。 Setter是一个构造,允许您在实例变量的管理周围添加一些结构(比如验证传入的值)。
答案 1 :(得分:1)
在您的实施BNRItem中,您可以直接访问BNRItem变量。所以dateCreated = [[NSDate alloc] init]
是正确的。您不能在BNRItem实现文件之外执行此操作。