id
작업에 필요한 입력이 있기 때문에 단지 Animal
를 사용할 필요가 - 그것은 목적에 대한 포인터 해야 점 것을 제외하고, void *
처럼 -C 개체. 그래서 그래, 당신은 보다 구체적인 개체 포인터 유형이 일하는 것이 대부분의 경우 id
를 사용할 수 있지만, 더 특정 유형 사용하는 것이 좋습니다 : 당신이 보면 당신은 많은 예를 찾을 수 있습니다
- (id)animal; // OK if 'animal' could be any type of object
- (Animal*)animal; // much better if you know that 'animal' points to an object of type 'Animal'
을 어떤 코코아 또는 코코아 터치 클래스에서. 의는 UIView
조금 살펴 보자 :
- (BOOL)isDescendantOfView:(UIView *)view; // returns YES for self.
- (UIView *)viewWithTag:(NSInteger)tag; // recursive search. includes self
당신이 볼 수 있듯이, 첫 번째 방법은 매개 변수로 UIView*
걸립니다. UIView
의 인스턴스에 대한 포인터 이외의 다른 값을 전달하려고하면 컴파일러에서 오류가 발생합니다.
는 두 번째 방법은 UIView*
반환, 당신은 UIView
이해 다른 메시지의 수신자로 직접 결과를 사용할 수 있습니다 : 매개 변수의 유형에 대한 특정 인
[[topView viewWithTag:someTag] removeFromSuperview];
과 값을 반환 컴파일러의 도움을 할 수 있습니다 개체에 적절한 메시지를 보내고 올바른 값을 반환하는지 확인하십시오.
"거의 항상 'id'를 사용하라 '고 말한 사람은 누구나 틀렸어. 보유하고있는 특정 유형을 사용하십시오. 'id'를 사용하고자하는 곳은 모호한 타입을 반환 할 때입니다. NSDictionary objectForKey를 말하십시오. 그것이'id'라고 선언되면, 컴파일러는 타입이 지원하지 않는 메소드 호출에 대해 불평하지 않을 것입니다. –
@HotLicks - "모호한"? ;-) – CRD
또한 : "코코아로부터의 것들"은 본질적으로 모두 NSObject에서도 상속됩니다. –