<分区>
假设我的类有以下 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 发送消息)。我在这里写的似乎是这种初始化方式的唯一问题。你怎么看?
页数。假设使用 ARC。
感谢许多回复,但基本上我感兴趣的是解决方案 2 可能存在的问题是什么?