正如我們所知,在免費橋接類型和目標c類型(如CFArrayRef
和NSArray
)之間進行轉換非常容易。昨天,我發現了一段代碼,轉換CGImageRef
(這是不是一個免費的工具,橋型),以id
如下:目標和非免費橋接類型之間的轉換
CALayer *imgLayer = [CALayer layer];
imgLayer.contents = (id)aImage.CGImage;
但是,它工作正常。但我不明白,因爲CGImageRef
根據蘋果的文件不屬於免費橋接類型。看第二行代碼,imgLayer
應保留分配給屬性內容的值。因爲CGImageRef
轉換爲id
,所以我認爲在屬性內容的setter方法中,它會發送一個保留消息給這個對象,像這樣[xxx retain]
。但aImage.CGImage
不是一個對象,所以我不認爲這個保留消息將正確執行(但它會)。所以我的問題是這種轉換背後的實際行動是什麼?
謝謝!儘管我是Objective-C的初學者,但你的回答對我來說很清楚。 – Kery