iOS 7 용 프로그램을 만들고 있지만 몇 가지보기에서 거의 동일한 메서드를 사용하므로 대부분의 메서드와 메서드를 다루는 공통 클래스를 만들고 싶습니다. 모든보기에 대해 개별적인 마무리 터치에 콜백 메소드를 사용합니다. 다음과 같은Objective-C 다른 클래스의 인수로 콜백 메서드
#import <Foundation/Foundation.h>
@interface Common : NSObject
+(void)target:(Class)object method:(SEL)selector;
@end
Common.m됩니다 : 런타임에
+(void)target:(Class)object method:(SEL)selector
{
NSLog(@"target...");
if ([object respondsToSelector:@selector(selector)])
{
[object performSelector:@selector(selector)];
} else {
NSLog(@"%@", object);
}
}
는,
// On top of the view .m
#import "Common.h"
// Method which will be called.
-(void)doSomething
{
NSLog(@"doSomething...");
[Common target:self method:@selector(callbackMethod)];
}
// Method I want to be called.
+(void)callbackMethod
{
NSLog(@"Should come here...");
}
Common.h은 다음과 같습니다 : 내가보기에 다음 코드를 출력 만 : doSomething ..., 대상 ..., < 부모보기 컨트롤러 : 0x8d24bb0 >
여기서 문제는 콜백 메소드를 호출하는 것입니다. 프로그램은 Common.m의 메소드에 도달하지만 부모로부터 메소드를 호출 할 수 없습니다.
슈퍼 클래스) 모든 공통 비트를 구현합니다. 그런 다음 해당 클래스의 하위 클래스를 만들고 사용자 정의해야하는 메서드를 무시할 수 있습니다. 'performSelector'는 항상 이상한 냄새가납니다. 또는 공통 비트에 대해 클래스 범주를 사용하십시오. – verec
@selector()는 SEL 개체를 만드는 데 사용되는 리터럴입니다. SEL을 전달했기 때문에 @selector()를 사용하여 해당 인수를 래핑 할 필요는 없습니다. 직접 사용할 수도 있습니다. –