3. 实现分类也可以添加属性

1)Sense:

Teacher: Where is LiLei from?

XiaoMing: I don't know.

Teacher: Guess?.

LiHua: He is from __

在程序当中,假设XiaoMing的中没有guess这个方法,后来被Runtime添加一个名字叫guess的方法,最终再调用guess方法做出相应。那么,Runtime是如何做到的呢?

2)Step:

①动态给XiaoMing类中添加guess方法:

class_addMethod([self.xiaoMing class], @selector(guess), (IMP)guessAnswer, "v@:");

这里参数地方说明一下:

(IMP)guessAnswer 意思是guessAnswer的地址指针;

"v@:" 意思是,v代表无返回值void,如果是i则代表int;@代表 id sel; : 代表 SEL _cmd;

“v@:@@” 意思是,两个参数的没有返回值。

②调用guess方法响应事件:

[self.xiaoMing performSelector:@selector(guess)];

③编写guessAnswer的实现:

void guessAnswer(id self,SEL _cmd){

NSLog(@"He is from GuangTong");

}

这个有两个地方留意一下:

1.void的前面没有+、-号,因为只是C的代码。

2.必须有两个指定参数(id self,SEL _cmd)

3)Show Code:

-(void)answer{

class_addMethod([self.xiaoMing class], @selector(guess), (IMP)guessAnswer, "v@:");

              if ([self.xiaoMing respondsToSelector:@selector(guess)]) {

                   [self.xiaoMing performSelector:@selector(guess)];

              } else{

                   NSLog(@"Sorry,I don't know");

              }

                 self.cityTf.text = @"GuangTong";

}

void guessAnswer(id self,SEL _cmd){

     NSLog(@"He is from GuangTong");

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,842评论 0 9
  • 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
    Ethan_Struggle阅读 6,593评论 0 7
  • 什么是值得的人? 我朋友圈收到很多人的评论,说我很幸福,能遇到这样的人,但是我想没有人会知道,过去我多绝望,我根本...
    阿信bk阅读 10,764评论 0 3
  • 后代 51年前,伴随着虚弱的哭声,一个男孩呱呱坠地;51年后,这个男人已成为一个父亲,听着他...
    2a9464411dd7阅读 1,456评论 0 0
  • 从2012到2016,我从高中到大学,ONE也从1.0更新到了3.0 阿,略微强迫症的我看着这些数字和标点符号好别...
    不唱歌宁愿哑巴星人阅读 4,505评论 0 0