iOS runtime 運(yùn)行時(shí)( - 俗談)
iOS runtime 運(yùn)行時(shí)( 二 深談)
iOS runtime 運(yùn)行時(shí)( 三 深談)
iOS runtime 運(yùn)行時(shí)( 四 深談)
忙里偷個(gè)閑属韧,來(lái)稍微寫點(diǎn)
談到運(yùn)行時(shí),相對(duì)應(yīng)的就有編譯時(shí);
1).運(yùn)行時(shí)-- 直到程序運(yùn)行時(shí)才去確定一個(gè)對(duì)象的具體信息,并且可以改變這個(gè)類的具體信息笆豁,包括它的方法孽锥,變量等等锯七;
2).編譯時(shí)-- 是在程序運(yùn)行之前访敌,編譯的時(shí)候腊嗡,就確定了這個(gè)對(duì)象的具體信息舷手,并且不可改變
先來(lái)說(shuō)說(shuō)拧簸,運(yùn)行時(shí),確定一個(gè)對(duì)象的具體信息的例子
NSString *str = [NSArray arrayWithObject:@"3"];
NSLog(@"%ld",str.length);
這兩句 代碼男窟,在Xcode里是可以編譯成功盆赤,不會(huì)報(bào)錯(cuò),但會(huì)有警告歉眷,運(yùn)行的時(shí)候會(huì)崩潰牺六,這就體現(xiàn)了,運(yùn)行時(shí) 才會(huì)確定str 這個(gè)指針指向的對(duì)象的類型
編譯時(shí)汗捡,str 是被當(dāng)做 字符串 來(lái)進(jìn)行處理的淑际,運(yùn)行的時(shí)候,就要訪問str真正指向的對(duì)象,數(shù)組春缕,所以 數(shù)組調(diào)用 length 的方法盗胀,就會(huì)拋出一個(gè)找不到該方法的異常,崩潰掉了呢
再舉一個(gè)例子:
#import <Foundation/Foundation.h>
@interface RTObj :NSObject
-(void)sort;
@end
#import "RTObj.h"
@implementation RTObj
@end
這樣的一個(gè)類淡溯,.h 文件里聲明了一個(gè)方法读整,.m 里并沒有實(shí)現(xiàn)這個(gè)方法,.m 會(huì)有一個(gè)提示的警告
如果我這樣 編寫代碼
RTObj *obj = [[RTObj alloc] init];
[obj sort];
這兩句代碼在編譯時(shí)咱娶,程序運(yùn)行之前是不會(huì)有任何問題的米间,警告都不會(huì)存在,但是運(yùn)行的時(shí)候膘侮,會(huì)因?yàn)檎也坏竭@個(gè)方法 而崩潰
這樣我們就簡(jiǎn)單的了解了下 運(yùn)行的時(shí)候 確定 這個(gè)對(duì)象的 具體信息的概念屈糊,希望對(duì)大家有幫助,下一篇文章我們會(huì)探討 改變琼了!
如果你有不同的見解逻锐,歡迎留言吐槽,I'm waiting for you!