iOS runtime 運行時( - 俗談)
iOS runtime 運行時( 二 深談)
iOS runtime 運行時( 三 深談)
iOS runtime 運行時( 四 深談)
忙里偷個閑,來稍微寫點
談到運行時,相對應的就有編譯時;
1).運行時-- 直到程序運行時才去確定一個對象的具體信息,并且可以改變這個類的具體信息,包括它的方法,變量等等;
2).編譯時-- 是在程序運行之前,編譯的時候,就確定了這個對象的具體信息,并且不可改變
先來說說,運行時,確定一個對象的具體信息的例子
NSString *str = [NSArray arrayWithObject:@"3"];
NSLog(@"%ld",str.length);
這兩句 代碼,在Xcode里是可以編譯成功,不會報錯,但會有警告,運行的時候會崩潰,這就體現了,運行時 才會確定str 這個指針指向的對象的類型
編譯時,str 是被當做 字符串 來進行處理的,運行的時候,就要訪問str真正指向的對象,數組,所以 數組調用 length 的方法,就會拋出一個找不到該方法的異常,崩潰掉了呢
再舉一個例子:
#import <Foundation/Foundation.h>
@interface RTObj :NSObject
-(void)sort;
@end
#import "RTObj.h"
@implementation RTObj
@end
這樣的一個類,.h 文件里聲明了一個方法,.m 里并沒有實現這個方法,.m 會有一個提示的警告
如果我這樣 編寫代碼
RTObj *obj = [[RTObj alloc] init];
[obj sort];
這兩句代碼在編譯時,程序運行之前是不會有任何問題的,警告都不會存在,但是運行的時候,會因為找不到這個方法 而崩潰
這樣我們就簡單的了解了下 運行的時候 確定 這個對象的 具體信息的概念,希望對大家有幫助,下一篇文章我們會探討 改變!
如果你有不同的見解,歡迎留言吐槽,I'm waiting for you!