2013-12-18 3 views
1

두 오브젝트를 작성하고 두 오브젝트에서 같은 메소드를 실행하면 동일한 오브젝트 유형의 다른 인스턴스화에 대한 두 메소드의 포인터가 같은.오브젝트의 다른 인스턴스가 메모리에있는 메소드에 대한 동일한 포인터를 공유합니까

예 :

NSObject *obj1 = [NSObject new]; 
NSObject *obj2 = [NSObject new]; 

[obj1 doSomething]; 
[obj2 doSomething]; 

doSomething 이러한 개체 모두에 대해 동일한 포인터입니다. 어떻게 증명할 수 있습니까? 그렇지 않습니다. 나는 그것이 있다고 들었다.

+1

"메소드에 대한 포인터"는 Objective-C에서 매우 약한 것이지만, 객체의'Class'를 가져온 다음'class_getInstanceMethod'를 사용하여 메소드 포인터를 얻을 수 있습니다. 두 객체의 클래스가 동일하다면 메소드가 될 것입니다. –

+0

일반적으로 이러한 작업을 수행하는 데는 약 5 가지 방법이 있습니다. 'methodForSelector'도 사용할 수 있습니다. –

+0

Objective-C는 일반 서브 클래스 외에 서브 클래 싱없이 클래스에 새로운 기능을 추가하는 "카테고리"를 허용하기 때문에 "약하다". 또한 별도의 컴파일 복잡성으로 인해 실제로 주어진 클래스의 동일한 메소드 이름에 응용 프로그램의 다른 부분에서 두 가지 다른 메소드를 지정하는 것이 가능합니다. –

답변

1

이것은 - 각 개체에 대해 새 함수 포인터를 만들지는 없습니다. (그리고 그렇게하는 것은 엄청나게 어려울 것입니다.)

이것은 e에서 관찰 할 수 있습니다. 지. NSObject 클래스 참조를 읽습니다. 이 클래스에는 instanceMethodForSelector:이라는 메서드가 있습니다. 이 메소드는 클래스 메소드이므로 인스턴스에만 의존하지 않는 함수 포인터를 반환 할 수 있으며, 클래스 (물론 selector)에서도 가능합니다.

+0

응답 해 주셔서 감사합니다. 나는 차라리 꽤 큰 타자 (@HotLicks, @ H2CO3)를 가지고 있기 때문에 괜찮은 질문이었을 것입니다 ... 다시 한번 감사드립니다. –