文字列を含む配列があるとしましょう。
NSArray *names = [NSArray arrayWithObjects: @"One", @"Two", @"Three", nil];
私が望むのは、いくつかのカスタム クラスのオブジェクトを開始し、それらを可変配列に追加することです。文字列引数を取るカスタム init メソッドを使用しています。
より具体的には[SomeClass alloc] initWithName: aName]
、結果のオブジェクトをに追加したいと思いますNSMutableArray
。
Objective-C の高速列挙を使用することを考えています。だから私が得るものは次のとおりです:
NSMutableArray *objects = [NSMutableArray arrayWithCapacity: [names count];
for (NSString *name in names) {
[objects addObject: [[[SomeClass alloc] initWithName: name] autorelease]];
}
問題はnil
、配列に追加できないことと、例外処理が好きではないことです。ただし、私の開始メソッドは を返す場合がありnil
ます。そこで、追加する前に最初にチェックすることにしました(防止)。私の新しい for-in ループは次のとおりです。
SomeClass *someObject;
for (NSString *name in names) {
someObject = [[[SomeClass alloc] initWithName: name] autorelease];
if (someObject) {
[objects addObject: someObject];
}
}
ここで、新しいオブジェクトをすぐに配列に渡すのではなく、someObject
最初にポインターを設定してから、ポインターを配列に渡します。
この例は私に疑問を投げかけます。ループ内でsomeObject = [[[SomeClass alloc] initWithName: name] autorelease]
、配列内の既存のオブジェクト (同じポインターを使用して追加されたもの) も変更されますか?
言い換えれば、addObject: (id)someObject
メソッドは渡したポインターの新しい内部コピーを作成するのか、それともポインターのコピーを作成する必要があるのか (方法はわかりません)、そのコピーを自分で渡す必要があるのでしょうか?
どうもありがとう!:-)