2012-04-23 1 views
1

Когда новый объект создается и инициализируется, почему мы используем id? Не можем ли мы использовать (NSObject *)?Почему не использовать NSObject при инициализации вместо id

+0

Да, вы можете. Вот [статья] (http://unixjunkie.blogspot.com/2008/03/id-vs-nsobject-vs-id.html), которая объясняет все это ... – demon9733

ответ

6

Не каждый объект в Objective C равен NSObject. Существуют и другие корневые классы (например, NSProxy), которые не получены из NSObject.

id означает абсолютно любой объект. Все объекты Objective C, которые могут принимать сообщения (включая Class), могут быть переданы как id без предупреждений типа.

NSObject* полезен только для объектов, которые фактически получены из NSObject. Если вы передадите что-то, что не получено из него, введите checker, который будет жаловаться.

+4

Почти; одна важная причина, по которой используется 'id', заключается в том, что она не требует приведения к более конкретному типу, тогда как' NSObject * '. – bbum

1

Потому что NSObject - это отдельный класс Objective C. Это базовый класс для большинства всего (* но не все, +1 к HamsterGene), но это все еще класс.

И если вы назначили новый объект (любого типа, который спускается от NSObject) к нему, вы потеряете Наследование & свойства из любой подклассы типа вы были созданы были.

id является roughly equivalent к void * в его поведение, где вы можете назначить любой Objective объекта C к id, например, как вы можете назначить любой случайный блок памяти (без ухода за это содержание или типа) к void *.

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

  • Нет связанных вопросов^_^