В чем разница между arrayWithObjects и initWithObjects? - PullRequest
7 голосов
/ 19 июля 2011

Не могли бы вы объяснить точную разницу между этими двумя строками?

NSArray *foo = [NSArray arrayWithObjects:@"hai",@"how",@"are",@"you",nil];
NSArray *bar = [[NSArray alloc] initWithObjects:@"hai",@"how",@"are",@"you",nil];

Ответы [ 3 ]

17 голосов
/ 19 июля 2011

arrayWithObjects является "конструктором удобства".

Это будет делать:

return [[[NSArray alloc] initWithObjects:@"hai",@"how",@"are",@"you",nil] autorelease]

для вас.

Это просто удобный метод для получения автоматически освобожденного объекта при улучшении читаемости оператора. Имейте в виду, что тот факт, что объект автоматически освобожден, является простым соглашением языка (а не правилом, поэтому вы можете поступить иначе, но я бы не советовал).

8 голосов
/ 19 июля 2011

arrayWithObject возвращает автоматически выпущенный массив, поэтому вам не нужно беспокоиться об освобождении его, когда он вам больше не нужен (но если вы храните его в переменной экземпляра, вы должны сохранить его, чтобы предотвратить освобождение пула автоматического выпуска) Это). initWithObject возвращает массив с счетом сохранения 1, т. Е. У вас есть массив, и вы должны освободить его в какой-то момент, чтобы предотвратить утечки памяти.

Возможно, вы захотите прочитать это руководство для получения дополнительной информации.

2 голосов
/ 19 июля 2011

У вас есть второй массив, но не первый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...