В чем разница между использованием alloc и class_createInstance - PullRequest
5 голосов
/ 27 сентября 2010

Хотите знать, в чем разница между созданием класса с:

Class clazz = [NSString class];
[clazz alloc];

и

class_createInstance(clazz,0);

Ответы [ 3 ]

8 голосов
/ 27 сентября 2010

По сути, вам не следует использовать class_createInstance(), если вы не знаете достаточно о том, что вы делаете, чтобы самостоятельно ответить на этот вопрос.

Вызов class_createInstance() позволяет обойти любые особые случаи, которые были реализованыв +alloc.Если вы попробуете это с NSString, вы получите экземпляр NSString, а не экземпляр закрытого класса-заполнителя, который является подходящей целью для любого сообщения -init..., которое вы хотите отправить.

2 голосов
/ 27 сентября 2010

Здесь есть описание:

http://www.cocoabuilder.com/archive/cocoa/111527-class-createinstance-with-nsarray-nsdictionary.html

По сути, class_createInstance предназначен для разработчиков Какао и предоставляет им низкоуровневый доступ к процессу.Пользователи API должны использовать alloc, который предположительно использует class_createInstance или что-то в этом роде.

2 голосов
/ 27 сентября 2010

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

Например, поскольку некоторые классы в Какао (например, коллекции) являются кластерами классов, возможно, они переопределяют +allocреализовать пользовательское поведение.Вы не можете сделать это при использовании функции.

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