2013-08-21 1 views
0

Как вы можете определить, выделяет ли метод класса и вводит объект? Например ...Objective-C: Как определить, выделяет ли класс метод/inits в

NSArray *theArray = [NSArray array]; 
NSArray *anotherArray = [[NSarray alloc] init]; 

В чем разница между использованием этих двух? Разве они не создают пустой массив?

NSCalendar *theCalendar = [NSCalendar currentCalendar]; 
NSCalendar *anotherCalendar = [[NSCalendar alloc] init]; 

Как вы узнали, что использовать при создании объектов?

+3

Приходит к следующим соглашениям об именах и чтению документации. – Thilo

ответ

0

Нет разницы, если включена ARC.

[NSArray массив] - удобный способ. Он выделяет объект массива, инициализирует его и помечает объект для авторекламы (позднее это означает, что автоматический подсчет ссылок отключен). Многие объекты предоставляют эти типы методов для создания экземпляров. Обратитесь к документам API API, чтобы узнать, предлагает ли класс вашего интереса ярлык alloc-init- (autorelease) или имеет методы создания или инициализации, которые лучше подходят для ваших нужд. Используйте их - они короче, код легче читать, нет необходимости беспокоиться о том, включен или выключен ARC. Напишите аналогичные методы для ваших собственных классов.

Используйте специальный alloc-init, если вам нужно передать параметры в функции init. Например.

NSMutableArray ary = [[NSMutableArray alloc] initWithCapacity:50]; 

или даже лучше

NSMutableArray ary = [NSMutableArray arrayWithCapacity:50]; 

Опять же, Alloc-INIT пары были полезны, прежде чем ARC, когда кто-то хочет иметь контроль над опорным экземпляром подсчета.

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