我正在使用一個不基於ARC的項目的ARC兼容庫。該庫中的函數返回一個保留的UIImage *
對象。有沒有辦法使用__bridge
屬性讓ARC知道這個,以便它可以管理返回對象的保留計數?我想:從ARC方法中釋放一個調用無弧C函數的對象
UIImage *returnedImage;
returnedImage = (__bridge_transfer UIImage *)functionThatReturnsAUIImage();
但它不會讓我的UIImage *
轉換爲UIImage *
)。我也試過了:
returnedImage = (UIImage *)(__bridge_transfer void *)functionThatReturnsAUIImage();
哪個也沒有用。編譯器建議使用__bridge_retained
而不是__bridge_transfer
,但我相信會做與我以前相反的事情(即它會增加返回的UIImage
對象上的保留計數)。
我相信正確的做法是讓C函數返回一個自動釋放對象。盡我所知,ARC假定任何返回對象的C函數都會返回一個自動釋放對象。我可以訪問這個庫的源代碼,所以我可以這樣做,但是我想知道如果我無法修改庫,是否有可以從調用方使用的解決方案。
您可以禁用某些文件的ARC,而不是試圖使它們與ARC兼容。請參閱http://stackoverflow.com/questions/10184307/batch-adding-fno-objc-arc-flag-to-multiple-source-files/10184313#10184313。 –
@EvanMulawski是對的。不要費心嘗試製作符合ARC標準的圖書館,根本沒有必要。 –
謝謝你們兩位。我沒有試圖讓庫弧符合,它不是,我很好。我的問題是庫中有一個C函數(不是objc方法),它返回一個UIImage。我的調用模塊,符合ISO標準,調用此函數並獲取UIImage。我認爲會發生的事情是,ARC假定c函數正在返回該UIImage的自動釋放實例,所以它不會釋放它,並且UIImage會泄漏。 – neils4fun