【iOS学习笔记 15-11-10】Objective-C中根据函数名调用函数
2015-11-10 15:53
453 查看
原文出自:http://blog.csdn.net/hopedark/article/details/7970370
Objective-C中调用函数的方法是“消息传递”,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的时候传递消息。
主要用到:SEL和@selector,当然还有performSelector
看例子:
先是三个函数:
[cpp] view
plaincopy
-(void)CallBack0
{
NSLog(@"CallBack0");
}
-(void)CallBack1:(int)a
{
NSLog(@"CallBack1:a=%i",a);
}
-(void)CallBack2:(int)a b:(int)b
{
NSLog(@"CallBack2:a=%i,b=%i",a,b);
}
performSelector调用:
[cpp] view
plaincopy
[self performSelector:@selector(CallBack0)];
[self performSelector:@selector(CallBack1:) withObject:1];
[self performSelector:@selector(CallBack2:b:) withObject:1 withObject:2];
根据函数名动态调用:
[cpp] view
plaincopy
NSString *a=@"CallBack0";
SEL faSelector=NSSelectorFromString(a);
[self performSelector:faSelector];
NSString *b=@"CallBack1:";
SEL fbSelector=NSSelectorFromString(b);
[self performSelector:fbSelector withObject:1];
NSString *c=@"CallBack2:b:";
SEL fcSelector=NSSelectorFromString(c);
[self performSelector:fcSelector withObject:1 withObject:2];
这样就可以根据函数名调用函数啦!
Objective-C中调用函数的方法是“消息传递”,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的时候传递消息。
主要用到:SEL和@selector,当然还有performSelector
看例子:
先是三个函数:
[cpp] view
plaincopy
-(void)CallBack0
{
NSLog(@"CallBack0");
}
-(void)CallBack1:(int)a
{
NSLog(@"CallBack1:a=%i",a);
}
-(void)CallBack2:(int)a b:(int)b
{
NSLog(@"CallBack2:a=%i,b=%i",a,b);
}
performSelector调用:
[cpp] view
plaincopy
[self performSelector:@selector(CallBack0)];
[self performSelector:@selector(CallBack1:) withObject:1];
[self performSelector:@selector(CallBack2:b:) withObject:1 withObject:2];
根据函数名动态调用:
[cpp] view
plaincopy
NSString *a=@"CallBack0";
SEL faSelector=NSSelectorFromString(a);
[self performSelector:faSelector];
NSString *b=@"CallBack1:";
SEL fbSelector=NSSelectorFromString(b);
[self performSelector:fbSelector withObject:1];
NSString *c=@"CallBack2:b:";
SEL fcSelector=NSSelectorFromString(c);
[self performSelector:fcSelector withObject:1 withObject:2];
这样就可以根据函数名调用函数啦!
相关文章推荐
- libsqlite3.tbd is not an object file (not allowed in a library)的解决办法
- Objective-C实现Mac终端日历程序(cal命令)
- 二、根据向导创建ObjectARX 程序
- java实现map和object互转的三种方法
- PF_NETLINK应用实例NETLINK_KOBJECT_UEVENT具体实现--udev实现原理
- CocoaPods:管理Objective-c 程序中各种第三方开源库关联
- Objective-C上地球坐标系到火星坐标系转换算法
- Objective-C Autorelease Pool 的实现原理
- 【问题】报错[CRITICAL] Rendering SLS 'base:minions.install' failed: Jinja variable 'list' object has no element 0
- <iOS>Objective-C常用的函数和常用的常量
- Objective-C 程序设计 第九章
- 内存管理
- Objective-C 之 @property和@synthesize
- Objective-c 代理模式(delegate)
- @implementation NSString (NSStringDebug) -(void) objectForKey:(NSString*) str { assert(NO);
- Objective-C学习—UIScrollView控件使用
- Objective-C中的instancetype和id区别
- vs2008+ObjectARX2010第一个ARX程序hello arx
- Java 中 Iterator<Object>使用
- ObjectStream的使用