2010-10-27 2 views
3

При добавлении объектов в NSArray с использованием «initWithObjects» кто-нибудь может подтвердить, что элементы сохранены. Я уверен, что они есть, но не могут найти его где-либо в отношении initWithObjects?NSArray initWithObjects: сохранить объекты?

// CREATE DRINKS 
Coffee *drink1 = [[Coffee alloc] initWithName:@"Flat White"]; 
Coffee *drink2 = [[Coffee alloc] initWithName:@"Cappucino"]; 
Coffee *drink3 = [[Coffee alloc] initWithName:@"Latte"]; 
Coffee *drink4 = [[Coffee alloc] initWithName:@"Mocha"]; 
Coffee *drink5 = [[Coffee alloc] initWithName:@"Hot Chocolate"]; 

// SET ARRAY 
NSArray *tempArray = [[NSArray alloc] initWithObjects:drink_1, drink_2, drink_3, drink_4, drink_5, nil]; 
[self setCoffeeList:tempArray]; 

// CLEAN UP 
[drink_1 release]; 
[drink_2 release]; 
[drink_3 release]; 
[drink_4 release]; 
[drink_5 release]; 
[tempArray release]; 
[super viewDidLoad]; 

веселит Гэри

ответ

5

initWithObjects сохраняет все элементы в массиве.

initWithObjects: кол-во:

  • (ID) initWithObjects: (ID *) объекты подсчета: (NSUInteger) рассчитывать; Доступность: OpenStep

Это назначенный инициализатор для класса. Подклассы должны переопределять этот метод. Это должно инициализировать массив с объектами count (может быть равным нулю). Сохраняет каждый объект, помещенный в массив. Вызывает -init (который ничего не поддерживает, но поддерживает совместимость с MacOS-X) и нуждается в повторной реализации в подклассах, чтобы работать со всеми другими инициализаторами.

+0

Мне кажется, получить это описание из документации Xcode, документы для initWithObjects: count: (NSSet) упоминать сохранить, но не NSArray. Наверное, Чак указывает на свою стандартную практику и не упоминается везде. Большое спасибо ... – fuzzygoat

+0

@fuzzygoat: Документация не должна указывать ее снова для каждого метода. Общее правило управления памятью довольно простое и короткое; любой аргумент объекта, который должен удерживаться после завершения выхода метода, должен быть сохранен, если только он не является делегатом. Документация Apple обычно документирует лишь некоторые исключения из этого правила (наблюдатели NSNotificationCenter и делегаты CALayer). – PeyloW

+0

Спасибо, очень ценим. – fuzzygoat

4

Ожидается, что объекты возьмут на себя ответственность за то, что им нужно для поддержания. Массив отвечает за его элементы, поэтому он сохраняет их. Подробную информацию см. На странице memory management guide. (Нет, серьезно, прочитайте это. Вы поблагодарете себя позже, когда вам не придется задавать этот вопрос о каждом классе, который вы используете, и ваша программа не сбой каждые пять секунд.)

+0

Спасибо, сегодня у меня будет другой взгляд. – fuzzygoat

Смежные вопросы