인스턴스가 특정 메소드를 구현하는지 알고 싶습니다. respondsToSelector:
을 사용할 수 있지만 인스턴스가 메서드를 상속하는 경우 YES가 반환됩니다.인스턴스가 Objective-C에서 메서드를 구현하는지 여부를 어떻게 알 수 있습니까?
class_copyMethodList()
의 메서드를 반복 할 수 있지만 많은 인스턴스를 확인하려고 할 수 있으므로 더 단순한 솔루션 (예 : repondsToSelector:
, 클래스 자체에만 국한 됨 ...)
편집 : 실제로 기능이나 방법이 없다고 생각하기 때문에 광산을 썼다. 당신은 그렇게 reflection을 사용할 수 있습니다
+ (BOOL)class:(Class)aClass implementsSelector:(SEL)aSelector
{
Method *methods;
unsigned int count;
unsigned int i;
methods = class_copyMethodList(aClass, &count);
BOOL implementsSelector = NO;
for (i = 0; i < count; i++) {
if (sel_isEqual(method_getName(methods[i]), aSelector)) {
implementsSelector = YES;
break;
}
}
free(methods);
return implementsSelector;
}
자신의 수업에서이 작업을 수행하려는 경우 다른 tequniques가 복잡하고 성가신 디자인이므로 원하는 것을 알려주는 속성을 사용하는 것이 더 나은 디자인 패턴입니다. –
메서드에서 메모리 누수가 발생했습니다. 당신은'자유 (방법);해야합니다, 그렇지 않으면 누출 될 것입니다. 이 문제를 해결하기 위해 수정 하겠지만 참고하시기 바랍니다. –