self指向函数地址 动态调用函数的简单例子

#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

posted @ 2015-09-02 18:52  阿凡提王  阅读(219)  评论(0编辑  收藏  举报