f(sixleaves) = sixleaves

重剑无锋 大巧不工

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  95 随笔 :: 0 文章 :: 7 评论 :: 0 Trackbacks
 1 #import <Foundation/Foundation.h>
 2 @interface Person : NSObject
 3 - (void)test2;
 4 @end
 5 
 6 @implementation Person
 7 
 8 - (void)test2
 9 {
10     NSString *str = NSStringFromSelector(_cmd);
11     NSLog(@"%@", str);
12 }
13 @end
14 
15 int main() {
16 
17 
18 
19     Person *p = [[Person alloc] init];
20     //[p test2];
21 
22     // 1.把test2包装成SEL类型的数据
23     // 2.根据SEL数据找到对应方法的地址
24     // 3.根据方法的地址调用对应方法。
25 
26     //[p performSelector:@selector(test2)]; // 通过sel去找方法地址
27 
28     // 通过字符串调用方法,先将其转换成SEL
29     NSString *name = @"test2";
30     SEL s = NSSelectorFromString(name);
31     [p performSelector:s];
32 
33 
34 
35     // 发消息的本质,就是发送SEL,再根据SEL找到对应方法的地址。
36     return 0;
37 }
38 // SEL
39 //
     A
方法与SEL的关系:
40 /*
41 1.每个类的方法列表都存储在类对象中
42 2.每个方法都有一个与之对应的SEL类型的数据
43 3.根据一个SEL数据就能够找到方法的地址,从而调用方法、
44 
45 SEL类型的定义:
46 typedef struct objc_selector *SEL;
47 
48 B.SEL对象的创建:
49 SEL s = @selector(test);
50 SEL s2 = NSSelectorFromString(@"test");
51 
52 C.SEL的其他用法:
53 每个方法内部都有一个隐藏的SEL数据===》_cmd ===> 代表当前方法对应的SEL数据
54 NSStringFromSelector(_cmd) ===> 将SEL数据转换成NSString
55 NSSelectorFromString("test2") ===> 把test2转换成SEL类型的数据。
56 
57 */
posted on 2015-05-03 16:51 swp 阅读(94) 评论(0)  编辑 收藏 引用 所属分类: objective-c

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理