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閱讀 1,757評論 0 9
  • 我們常常會聽說 Objective-C 是一門動態語言,那么這個「動態」表現在哪呢?我想最主要的表現就是 Obje...
    Ethan_Struggle閱讀 2,230評論 0 7
  • 什么是值得的人? 我朋友圈收到很多人的評論,說我很幸福,能遇到這樣的人,但是我想沒有人會知道,過去我多絕望,我根本...
    阿信bk閱讀 5,322評論 0 3
  • 后代 51年前,伴隨著虛弱的哭聲,一個男孩呱呱墜地;51年后,這個男人已成為一個父親,聽著他...
    2a9464411dd7閱讀 211評論 0 0
  • 從2012到2016,我從高中到大學,ONE也從1.0更新到了3.0 阿,略微強迫癥的我看著這些數字和標點符號好別...
    不唱歌寧愿啞巴星人閱讀 959評論 0 0