2010-07-28 2 views
2

개체의 메서드를 직접 구현해야합니다. 예 :코코아, NSProxy, 개체에서 메서드를 인계하는 방법?

Person *p; // some object 
NSMutableArray *array = [NSMutableArray array]; 
[array addObject: p]; 

addObject를 내 메소드로 바꾸려면 어떻게해야합니까?

즉, 특정 개체의 addObject: 구현을 다른 구현으로 바꾸는 방법이 있습니까?

나는 NSProxy으로 놀고 있었지만 내가해야 할 것을 발견하지 못했습니다.

도움이 될 것입니다.

감사합니다.

답변

1

해당 개체를 메서드 구현이 다른 다른 클래스의 인스턴스로 만듭니다.

+0

이 객체에 대한 참조가있는 다른 객체는 어떻게 되겠습니까? 그것은 매달려 참조를 생성하지 않습니까? 이 변경 사항은 다른 개체에 투명해야합니다. – Abbas

+0

클래스는 NSMutableArray의 서브 클래스 여야합니다. 'CustomizedArray'는 다른 객체처럼 취급 할 수있는 다른 객체에 투명합니다. addObject는 구현에 따라 약간 다르게 동작합니다. – paulmelnikow

+0

@noa : 서브 클래 싱하는 NSMutableArray는 그렇게 간단하지 않습니다. 클래스의 전체 기능을 다시 구현해야합니다. – Chuck

0

:addObject 메서드를 재정의하려면 NSMutableArray을 사용할 수 있습니다. 자세한 내용은 Learn Objective-C tutorial (섹션 11)을 참조하십시오.

+3

범주의 메서드를 재정의하는 것은 실제로 권장되지 않습니다. 또한 원하는대로 단일 인스턴스가 아닌 NSMutableArray의 * all * 인스턴스에 대한 메서드를 대체합니다. – jbrennan

+0

나중에 언제든지이 대체를 취소 할 수있는 동안 전체 개체를 인계해야한다면 어떻게해야합니까? 또한이 개체에 대한 참조가있는 다른 개체에 완전히 투명하게 변경해야합니다.jbrennan이 지적했듯이 일부 특정 개체에 대해서는이 작업을 수행해야합니다. – Abbas

0

런타임 메서드를 바꿀 때 메서드를 사용할 수 있습니다. 사실, 당신에 대한 질문이있었습니다. finsl 솔루션이 당신에게도 도움이 될 것이라고 생각합니다. - Method swizzling for NSArray