簡體   English   中英

Non-ARC to ARC:指向對象的指針(**)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM