想象一下我的班级有以下 ivars/属性:
@property (nonatomic, copy) NSString *itemName;
@property (nonatomic, copy) NSString *serialNumber;
@property (nonatomic) int valueInDollars;
@property NSDate *dateCreated;
1)初始化此类的 ivars 的一种方法是这样的:
// Designated initializer of this class
-(id) initWithItemName: (NSString*) name
valueInDollars:(int)value
serialNumber:(NSString *)sNumber
{
// Call the superclass's designated initializer
self = [super init];
if(self)
{
// Init properties
self.itemName = name;
self.serialNumber = sNumber;
self.valueInDollars = value;
dateCreated = [[NSDate alloc] init];
}
// Return the address of the newly initialized object
return self;
}
2)我想去初始化这个类的另一种方法是例如写:
-(id) init
{
self = [super init];
if(self)
{
// basically do nothing
}
return self;
}
然后让用户根据需要使用该类进行初始化,例如,
MyClass *object = [[MyClass alloc] init];
object.dateCreated = [[NSDate alloc] init];
[object.dateCreated someMethod];
object.itemName = "Hello";
object.someProperty = [[SomeClass alloc] init];
我认为上面的事情是必须先调用某些属性(如上)才能alloc/init
使用它们,不是吗?如果用户忘记这样做,那么应用程序最多不会按预期工作,对吧?(它不会崩溃,因为我们可以向 nil 发送消息)。我在这里写的似乎是这种初始化方式的唯一问题。你有什么意见?
附言。这里也允许:http: //developer.apple.com/library/ios/#documentation/general/conceptual/CocoaEncyclopedia/Initialization/Initialization.html
pps。假设使用 ARC。
感谢您的许多回复,但基本上我对解决方案 2 可能存在的问题很感兴趣?