ios之runtime機(jī)制2016.6

1.為什么要學(xué)runtime?

最首要的原因是很多招聘要求提到這個,你不能不會吧。其次你寫代碼的時候有時候用到會很方便。

2.runtime機(jī)制是什么?

runtime,英文翻譯,運行時,它像操作系統(tǒng)一樣,用來執(zhí)行我們編寫的代碼。
它是基于C和匯編語言寫的,

3.怎么學(xué)runtime?

直接點它能干嘛?
簡單來說它可以獲得某個類的所有成員變量、屬性、方法,并且能夠動態(tài)添加。
可以動態(tài)交換方法、歸檔和解檔、字典轉(zhuǎn)模型等。
具體作用:發(fā)送消息、交換方法、動態(tài)添加方法、給分類加屬性、字典轉(zhuǎn)模型、
快速歸檔等

3.1發(fā)送消息

Dog.h文件

#import <Foundation/Foundation.h>
@interface Dog : NSObject
- (void)run;
+ (void)eat;
@end

Dog.m實現(xiàn)

#import "Dog.h"

@implementation Dog
- (void)run
{
    NSLog(@"一只狗正在奔跑。。。。");
}
+ (void)eat
{
    NSLog(@"一只狗正在吃。。。。");
}
@end

ViewController.m實現(xiàn),調(diào)用兩個方法

#import "ViewController.h"
#import "Dog.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [Dog eat];
    
    Dog *d = [[Dog alloc]init];
    [d run];
    
}

@end

現(xiàn)在引入runtime機(jī)制
引入頭文件,修改配置,不然會報錯


11809FA9-0A91-415D-98AE-046A5375D0BC.png

ViewController.m引入runtime機(jī)制,發(fā)送消息,來執(zhí)行方法

#import "ViewController.h"
#import "Dog.h"
#import <objc/message.h>
 
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    objc_msgSend([Dog class], @selector(eat));
    
    Dog *d = [[Dog alloc]init];
    objc_msgSend(d, @selector(run));
    
}
@end

3.2交換方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,774評論 0 9
  • 對于從事 iOS 開發(fā)人員來說,所有的人都會答出【runtime 是運行時】什么情況下用runtime?大部分人能...
    夢夜繁星閱讀 3,732評論 7 64
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,211評論 30 472
  • 我推開扉門 霧氣彌漫著 在夢里夢到的 心上人 就在山的對面
    嘸筠閱讀 120評論 0 0
  • “我追。一個成年人在一群尖叫的孩子中奔跑,但我不在乎。我追。風(fēng)拂過我的臉龐,我唇上掛著一個像潘杰希爾峽谷那樣大...
    花開半夏anle閱讀 475評論 1 3