2013-10-16 23 views
1

我知道在C中將一個變量轉換爲另一個類型會告訴編譯器,就好像該變量在內存中的類型和大小一樣。將一個Objective C對象轉換爲另一個時,編譯器級別會發生什麼

實施例:

int* a = (char*)b; 

徑b的值(這是一個1個字節存儲器地址),並存儲在4字節變量。 (糾正我,如果我錯了)

這是如何工作的鑄造Objective-C對象? 我也明白,每個對象只是一個C結構持有指向它的類,實例變量列表等的指針

如果我有一個類是UIView的一個名爲MyView的子類,並且我傳遞了一個指向UIView,也許是一個方法參數,我這樣做:

-(id)setupThisViewForMe:(UIView*)aView { 
    MyView* newView = (MyView*)aView; 
    newView = [[MyView alloc]initWithFrame:CGRectMake(0.0f,0.0f,100.0f,100.0f)]; 
    [newView takeOverTheWorldWithMyMethodInSubclass]; 
    return newView; 
} 

編譯器在編譯時究竟做什麼?

回答

4

編譯器在編譯時究竟做了什麼[當你投射Objective C對象時]?

幾乎沒有什麼:編譯器執行與ARC檢查,確保你沒有強迫一個弱指針注入了強勁的變量,反之亦然,但除此之外,編譯器相信你做正確的事。當然,如果你對你的編譯器「撒謊」,它將在運行時用不支持的消息異常「回報」。

+2

+1同樣多的,這實際上導致更多的問題,我會問以後:) –

相關問題