2012-03-30 29 views
1

我一直在想這一段時間,Google並沒有提供給我我想要的信息。鑄造過程需要多快?它取決於對象所具有的字段數量嗎?是不惜一切代價避免的東西?它在x32,x64和ARM機器上有所不同嗎?Casting Objective-C對象

+0

假設你正在投射像int,float等標量類型而不是對象,對不對?鑄造objets是爲了讓編譯器輸入檢查。 – 2012-03-30 18:19:21

回答

6

只有編譯器纔會向您發出更好的警告。在運行時間鑄造沒有性能影響。所有對象都只是對象。你發送消息給這些對象。

運行時並不在乎你在代碼中有一個指向該對象的指針時給出的類型。無論發生什麼,它都會發送消息。

例如:

NSArray *myString = [NSString stringWithFormat:@"Hello"]; 
NSNumber *longerString = [(NSString *)myString stringByAppendingString:@" World"]; 
NSLog(@"%@", longerString); 

將記錄Hello World。你真的給類型的東西編譯器可以檢查,但運行時只知道你傳遞一個消息到一個對象。它將使用對象的類來查找從消息名稱調用的方法,但它不關心在編譯時輸入的內容。

你可能也做:

id myString = [NSString stringWithFormat:@"Hello"]; 
id longerString = [myString stringByAppendingString:@" World"]; 
NSLog(@"%@", longerString); 

和運行時會做同樣的事情,但是編譯器會根據不同的語義的類型設定不同的匹配和產生警告/錯誤(基本上,做任何對象說它響應這個消息)。

+2

+1。鑄造只是一種合成糖。它與運行時間無關。 – 2012-03-30 18:27:10