SEL

 SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址。找到方法地址就可以调用方法其实消息就是SEL

 */

 

#import <Foundation/Foundation.h>

#import "Person.h"

 

int main()

{

    Person *p = [[Person alloc] init];

    

    [p test2];

    

//    NSString *name = @"test2";

//    

//    SEL s = NSSelectorFromString(name);

//    

//    [p performSelector:s];

    

    

    // 间接调用test2方法

    //[p performSelector:@selector(test2)];

    

    //[p test3:@"123"];

    

    

//    SEL s = @selector(test3:);

//    

//    [p performSelector:s withObject:@"456"];

    

    //[p test2];

    

    // 1.把test2包装成SEL类型的数据

    // 2.根据SEL数据找到对应的方法地址

    // 3.根据方法地址调用对应的方法

    return 0;

}

#import <Foundation/Foundation.h>

 

@interface Person : NSObject

 

+ (void)test;

 

- (void)test2;

 

 

- (void)test3:(NSString *)abc;

 

@end

 

 

#import "Person.h"

 

@implementation Person

+ (void)test

{

    NSLog(@"test-----");

}

 

- (void)test2

{

    // _cmd代表着当前方法

    

    NSString *str = NSStringFromSelector(_cmd);

    

    // 会引发死循环

    // [self performSelector:_cmd];

    

    NSLog(@"调用了test2方法-----%@", str);

}

 

- (void)test3:(NSString *)abc

{

    NSLog(@"test3-----%@", abc);

}

@end

 

posted @ 2016-03-28 11:25  lance.xiang  阅读(146)  评论(0)    收藏  举报