self指向函数地址 动态调用函数的简单例子
2015-09-02 18:52
531 查看
#import <Foundation/Foundation.h>
@interface Person : NSObject
- (void)test1;
- (void)test2:(NSString *)str;
@end
@implementation Person
- (void)test1
{
NSLog(@"无参数的对象方法");
}
- (void)test2:(NSString *)str
{
NSLog(@"带有参数的方法%@",str);
}
@end
/*
调用方法有两种方式:
1.直接通过方法名来调用
2.间接的通过SEL数据来调用
*/
int main(int argc, const char * argv[])
{
Person *person = [[Person alloc] init];
// 1.执行这行代码的时候会把test2包装成SEL类型的数据
// 2.然后根据SEL数据找到对应的方法地址(比较耗性能但系统会有缓存)
// 3.在根据方法地址调用对应的方法
[person test1];
// 将方法直接包装成SEL数据类型来调用 withObject:传入的参数
[person performSelector:@selector(test1)];
[person performSelector:@selector(test2:) withObject:@"传入参数"];
return 0;
}
2015-09-02 18:51:23.856 1[2299:113646] 无参数的对象方法
2015-09-02 18:51:23.857 1[2299:113646] 无参数的对象方法
2015-09-02 18:51:23.858 1[2299:113646] 带有参数的方法传入参数
Program ended with exit code: 0
@interface Person : NSObject
- (void)test1;
- (void)test2:(NSString *)str;
@end
@implementation Person
- (void)test1
{
NSLog(@"无参数的对象方法");
}
- (void)test2:(NSString *)str
{
NSLog(@"带有参数的方法%@",str);
}
@end
/*
调用方法有两种方式:
1.直接通过方法名来调用
2.间接的通过SEL数据来调用
*/
int main(int argc, const char * argv[])
{
Person *person = [[Person alloc] init];
// 1.执行这行代码的时候会把test2包装成SEL类型的数据
// 2.然后根据SEL数据找到对应的方法地址(比较耗性能但系统会有缓存)
// 3.在根据方法地址调用对应的方法
[person test1];
// 将方法直接包装成SEL数据类型来调用 withObject:传入的参数
[person performSelector:@selector(test1)];
[person performSelector:@selector(test2:) withObject:@"传入参数"];
return 0;
}
2015-09-02 18:51:23.856 1[2299:113646] 无参数的对象方法
2015-09-02 18:51:23.857 1[2299:113646] 无参数的对象方法
2015-09-02 18:51:23.858 1[2299:113646] 带有参数的方法传入参数
Program ended with exit code: 0
相关文章推荐
- git 忽略文件
- NOIP2015模拟3
- 心软要不得
- 我收藏的blog
- Java实现二叉排序树
- Exchange工具05—Network Monitor 3.4
- 增加Linux最大打开文件数/文件描述符 https://www.centos.bz/2012/05/linux-increase-the-maximum-number-of-open-files/
- 6.2打电话广播接收与短信广播接收者
- 迅雷登录IFRAME需求小记
- Spring SpEL表达式
- 五花八门的MySQL存储引擎,哪一盘是你的菜?
- HTML5之WebSocket(仅介绍客户端的实现)
- @Value取不到值引出的spring的2种配置文件applicationContext.xml和xxx-servlet.xml
- 【Win 7】安装 MSXML 4.0 出现“汇编组件安装错误”的解决方案
- 并发socket--练习篇
- Access sql语句创建表及字段类型
- BZOJ 2946 [Poi2000]公共串 后缀数组
- UVA10917 A walk trough the Forest (最短路,dp)
- 格子路径问题
- nginx 负载均衡