2012-04-23 1 views

답변

6

목표 C의 모든 개체가 NSObject 인 것은 아닙니다. NSObject에서 파생되지 않은 다른 루트 클래스 (예 : NSProxy)가 있습니다.

id은 절대적으로 모든 개체를 의미합니다. 모든 메시지 (Class 포함)를받을 수있는 목표 C는 유형 경고없이 id으로 전달할 수 있습니다.

NSObject*은 실제로 NSObject에서 파생 된 개체에만 유용합니다. 파생되지 않은 것을 전달하면 검사기가 불평 할 것입니다.

+4

거의; 'id'가 사용되는 큰 이유 중 하나는'NSObject * '가 더 구체적인 타입으로 변환 할 필요가 없기 때문입니다. – bbum

1

NSObject은 고유 한 목표 C 클래스입니다. 대부분 에 대한 기본 클래스입니다. (* 전부는 아니지만, HamsterGene에게는 +1입니다.)하지만 여전히 클래스입니다.

그리고 그것에 (NSObject에서을 내려하는 것이 모든 유형의) 새로운 객체를 할당하는 경우, 당신은 상속을했다 당신이 만들어 낸 서브 클래스 어떤 종류의 & 속성을 잃을 것입니다.

id은 당신이 void *에 (이 내용이나 형식의에 대한주의)는 메모리의 랜덤 덩어리를 할당하는 방법을 같이 id에 대한 객관적인 C 객체를 할당 할 수있는 행동의에 void *roughly equivalent입니다.