Objective-C 런타임 작동 방식을 읽었으므로 뭔가 잘못 이해 한 경우 의견을주십시오.Objective-C 런타임 이해
Person이라고하는 클래스가 있다고 가정 해 보겠습니다. 이 클래스에는 getSex 메서드가있을 수도 있고 없을 수도 있습니다. 여기
Person *p = [[Person alloc]init];
메모리는 ISA (도 클래스 사람 가리키는 생성된다) 인 경우에 할당되고, 초기화는 사람 아이바의
[p getSex];
여기
objc_msgSend (사람, 선택기 @ (getSex을 초기화하는 데 사용)가 Person 클래스에서 호출 될 때 Person 클래스가 그러한 메소드를 가지고 있지 않으면 런타임은 Person 루트 클래스에서 그 메소드를 찾는다. 메소드가 발견되면 메소드 블록 코드에 대한 포인터 인 IMP가 호출된다. 실행 됨.
그게 맞습니까?
그들은 어떤 경우에도 유효하지만 반드시 유용한 것은 아니며 'alloc'에 의해 0으로 설정됩니다. –
예, 그렇지만 잘 정의 된 것이 반드시 유효한 –
즉. Person 인스턴스에 할당 된 메모리는 Person 클래스에 대한 포인터 만 보유합니다. – OhDoh