クラスに次の ivar/プロパティがあるとします。
@property (nonatomic, copy) NSString *itemName;
@property (nonatomic, copy) NSString *serialNumber;
@property (nonatomic) int valueInDollars;
@property NSDate *dateCreated;
1) このクラスの ivar を初期化する 1 つの方法は次のとおりです。
// 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)私が考えているもう1つの方法は、このクラスを初期化することです。たとえば、次のように書くことです:
-(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 に送信できるため、クラッシュしません)。ここに書いたことは、この初期化方法の唯一の問題のようです。あなたの意見は何ですか?
ps。ここでも許可されています:http://developer.apple.com/library/ios/#documentation/general/conceptual/CocoaEncyclopedia/Initialization/Initialization.html
pps。ARCが使用されていると仮定します。
多くの返信をありがとう、しかし基本的に私はソリューション 2 で考えられる問題に興味がありましたか?