Допустим, у меня есть массив со строками.
NSArray *names = [NSArray arrayWithObjects: @"One", @"Two", @"Three", nil];
Я хочу инициировать объекты некоторого пользовательского класса и добавить их в изменяемый массив.Я использую пользовательский метод init, который принимает строковый аргумент.
Чтобы быть более точным, я хочу [SomeClass alloc] initWithName: aName]
и добавить полученный объект к NSMutableArray
.
I 'Я думаю об использовании быстрого перечисления Objective-C.Итак, что я получаю:
NSMutableArray *objects = [NSMutableArray arrayWithCapacity: [names count];
for (NSString *name in names) {
[objects addObject: [[[SomeClass alloc] initWithName: name] autorelease]];
}
Проблема в том, что я не могу добавить nil
в массив, и мне не нравится обработка исключений.Тем не менее, мой метод инициации может вернуть nil
.Поэтому я решил проверить, прежде чем добавлять (профилактика).Мой новый цикл for:
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
создает новыйвнутреннюю копию указателя, которую я передаю, или мне нужно создать копию указателя - я не знаю, как - и передать копию самостоятельно?
Большое спасибо!: -)