2012-06-06 2 views
0

id Objective-C에서 객체 식별자는 id라는 고유 한 데이터 유형입니다. 이 유형은 클래스에 관계없이 모든 종류의 객체에 대한 일반적인 유형이며 클래스의 인스턴스 및 클래스 객체 자체에 사용할 수 있습니다. 여기 틸Apple의 obj-c 프로그래밍 가이드에서 "id"에 관한 혼동

id anObject; 

는 간단하고 같은 방법을 반환 값으로 목표 - C의 객체 지향 구조에 대한


명확 ID는 기본 데이터 유형으로하는 int 대체합니다. (함수의 반환 값과 같은 C 구조체의 경우 int는 기본 유형으로 남습니다.)

id가 int를 대체하는 이유를 이해하지 못했습니까? 그리고 마지막으로 괄호 안의 int는 기본값으로 유지됩니까?


키워드 닐은 널 객체로 정의되며, 0 이드, 닐, 대물-C의 다른 기본 유형의 값의 ID 헤더 파일 objc/objc.h 정의된다.

ID는 객체 데이터 구조에 대한 포인터로서 정의된다

typedef struct objc_object { 
    Class isa; 
} *id; 

위를 아닙니다 OBJ-C 무엇입니까 구문과 무엇을 설명한다?


모든 개체에는 어떤 클래스가 인스턴스인지 알려주는 isa 변수가 있습니다. 클래스 유형이 자체가 포인터로 정의되어 있기 때문에 :

typedef struct objc_class *Class; 

는 ISA 변수가 자주이라고

또한이 마지막 항을 이해하지 못했다 "는 ISA 포인터.".

+0

"위의 내용은 obj-c 구문이 아니며 설명하는 내용이 무엇입니까?"라는 의미를 분명히합니다. –

답변

2

같은 (즉, int 여전히 다른 모든 것들에 대한 기본 반환 값입니다) 메서드 반환 값, id는 int를 기본 데이터 유형으로 바꿉니다. (함수의 반환 값과 같은 C 구조체의 경우 int는 기본 유형으로 유지됩니다.)

여기 책이 조금 혼란 스럽습니다. 오브젝트로 작업하면서 더 구체적으로 다루고 싶지 않다면, id은 사용할 좋은 데이터 유형입니다.

ID는 객체 데이터 구조에 대한 포인터로서 정의된다

typedef struct objc_object { 
    Class isa; 
} *id; 

위를 아닙니다 OBJ-C 무엇입니까 구문과 무엇을 설명한다?

이는 개체의 내부 표현입니다. 당신의 책은 객관적인 C 객체가 마술이 아니라는 것을 보여주고 있습니다 : 표면 아래는 단지 구조체입니다. 데이터 유형 id은 이러한 구조체에 대한 포인터입니다.

모든 개체에는 어떤 클래스가 인스턴스인지 알려주는 isa 변수가 있습니다. ". ISA 포인터"클래스 타입 자체가 포인터로서 정의되므로

typedef struct objc_class *Class;

는 ISA 변수 자주이라 내부 데이터 구조

각 개체가 있습니다 클래스를 나타내는 다른 객체에 대한 포인터.

Objective-C로 프로그래밍하는 데 관심이 있다면 (적어도 배우는 동안은 제외)이 내용을 알 필요가 없습니다. Objective-C 런타임과 직접 상호 작용할 때와 같이 고급 기능을 수행하는 경우 유용합니다.

+1

muah 아름다운 답변 :) –

1

id가 int를 대체하는 이유를 이해하지 못 했습니까?

오브젝티브 C는 C에서

C.

의 상위 집합이며, 함수 반환 값을 가져야한다. 반환 값이 지정되지 않으면 함수는 기본적으로 int을 반환합니다.

Objective-C는 C의이 기본 동작을 무시하고 반환 값을 지정하지 않는 모든 클래스 메서드에서 id을 기본값으로 반환합니다. 그러나 동시에 다른 (C-)의 기본 동작은 같은 기능을 잎 오브젝티브 C의 객체 지향 구조에 대한

+0

hiii 뒤죽박죽, 답장을 보내 주셔서 감사합니다. 이 typedef struct objc_object { 클래스 isa; } * id; ...이 스 니펫이하는 일은 무엇입니까? 그 obj - C 가이드에 명시된 –

관련 문제