[英]Non-ARC to ARC: Pointer to a pointer to an object (**)
我正在嘗試將iOS項目轉換為ARC。
我正在對某些文件使用編譯器標志。
但是其中一個文件包含在如下方法中聲明的變量:
aClass **obj;
ARC關閉時,會出現錯誤:
“指向沒有顯式所有權的非常量類型的指針”
通過執行以下操作,我可以使警告消失:
aClass *__strong* obj;
就所有權而言,我認為這不是一個好習慣。
但是該錯誤在非ARC環境中不存在。
我的問題簡單如下:
我如何從非ARC更改為ARC設置對象的聲明,而不必使用*__strong*
?
即,如何在不使用*__strong*
情況下在ARC下聲明(或更改聲明) aClass **obj
,我敢肯定我已經讀過某個地方,這不是一個好習慣,但是我忘記了在哪里閱讀。
和:
為什么在非ARC環境下沒有給出錯誤。
TL; DR:除非可以避免,否則您可能不想要指向指針的指針。 在為您管理內存的系統下這樣做的設計是很差的。 該答案進一步說明: 指向Objective-C中的指針? 。
在非ARC下,系統將保留/釋放給您,因此誰擁有指針並不重要。 您(程序員)擁有它。 在ARC領域中,系統需要知道何時保留或釋放,並且不能總是推斷出哪個類/對象對特定對象擁有所有權。 其他類可能需要引用,但是聲明它的類已經使用該對象完成了。 基本上, __strong
告訴聲明類,它應該負責管理指針。 它以某種方式“覆蓋”指針的所有權。 因此,這是解決它的一種方法。 解決該問題的最佳方法是將代碼重構為不使用顯式管理的內存,但是如果不可能/太難了,則如何解決該問題將是可行的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.