2013-10-16 4 views
1

나는 C에서 한 변수를 다른 타입으로 캐스팅하는 것이 컴파일러에게 마치 그 변수가 그 타입과 메모리의 크기 인 것처럼 행동한다는 것을 알고있다.하나의 Objective C 객체를 다른 것으로 캐스팅 할 때 컴파일러 레벨에서 어떤 일이 일어나는가?

예 :

int* a = (char*)b; 

는 (1 바이트 메모리 어드레스이다) (b)의 값을 취하며 4 바이트에 해당 변수를 저장한다. (내가 틀렸다면 수정하십시오)

Objective-C 객체를 캐스팅하는 방법은 어떻게 작동합니까? 는 또한 각 개체 등의 클래스 인스턴스를 변수 목록에 대한 포인터를 잡고 단지 C 구조체 것을 이해

내가있는 UIView의 서브 클래스 MYVIEW 전화를 나는에 대한 포인터를 전달하고있는 클래스가있는 경우

-(id)setupThisViewForMe:(UIView*)aView { 
    MyView* newView = (MyView*)aView; 
    newView = [[MyView alloc]initWithFrame:CGRectMake(0.0f,0.0f,100.0f,100.0f)]; 
    [newView takeOverTheWorldWithMyMethodInSubclass]; 
    return newView; 
} 

정확히 컴파일러는 컴파일시에 일을 무엇 : 어쩌면 방법 인수의 UIView, 나는 이렇게?

답변

4

[컴파일시 Objective C 객체를 캐스팅 할 때] 컴파일러는 정확히 무엇을 수행합니까?

거의 아무것도 : 컴파일러는 당신이 강한 변수 또는 그 반대에 약한 포인터를 강요하지 있는지 확인하지만, 그 이외의 제조, ARC와 관련된 검사를 수행, 컴파일러 신뢰 당신이 옳은 일을합니다. 물론 컴파일러에 "거짓말"한다면, 런타임에 지원되지 않는 메시지 예외를 "갚을"것입니다.

+2

+1 사실만큼이나 많은 질문을하게되며, 나중에 질문하게됩니다. :) –

관련 문제