1. function pointer
c 함수포인터 처럼, objective-C에서도 함수포인터 얻어와서 호출할 수 있다.
2. 샘플 코드
@interface Car : NSObject
-(void) go:(int)a speed:(int)s;
@end
@implementation Car
-(void)go:(int)a speed:(int)s
{
NSLog(@"Car go : %d %d",a,s);
}
// go(id obj, SEL s, ...)로 변경 됌
@end
id CreateObject(NSString* name)
{
Class c = NSClassFromString(name);
return [[c alloc] init];
}
void foo(id obj)
{
//obj가 Car인지확인
if ([obj isKindOfClass:[Car class]])
{
NSLog(@"yes");
}
else
{
NSLog(@"no");
}
}
int main()
{
Car* p = [[Car alloc] init];
// 클래스 얻는 법
SEL s = @selector(go:speed:);
[p performSelector:s]; // go(c1,s)
typedef id(*PF)(id, SEL, ...);
PF* f = (PF)[p performSelector:s]; //objC함수로 부터 c함수 포인터 얻기
f(p, s, 1,2);//[p go:1 speed:2]
return 0;
}
'교육 > Objective-C' 카테고리의 다른 글
[Objective-C] NSString parsing (0) | 2018.06.26 |
---|---|
[Objective-C] 지연된 초기화 (0) | 2016.08.03 |
[Objective-C] category (0) | 2016.08.01 |
[Objective-C] protocol (0) | 2016.08.01 |
[Objective-C] kvo(key value observing) (0) | 2016.08.01 |