ARC技術未在我的項目中使用。我正在嘗試添加SBJson庫。我爲所有具有SBJson前綴的文件設置了-fobjc-arc標誌,但是在編譯過程中,ARC語義問題(指向非常量類型'id'的指針沒有明確的所有權)出現在一個類標題中,這與SBJSon無關。爲什麼它不起作用?在非ARC項目中使用ARC庫
行錯誤:
id *_controls;
我不能告訴你,因爲項目的商業許可的我的代碼,我感謝您的理解。
當我使用該庫的舊版本(無ARC)時,項目編譯通常正常進行。
ARC技術未在我的項目中使用。我正在嘗試添加SBJson庫。我爲所有具有SBJson前綴的文件設置了-fobjc-arc標誌,但是在編譯過程中,ARC語義問題(指向非常量類型'id'的指針沒有明確的所有權)出現在一個類標題中,這與SBJSon無關。爲什麼它不起作用?在非ARC項目中使用ARC庫
行錯誤:
id *_controls;
我不能告訴你,因爲項目的商業許可的我的代碼,我感謝您的理解。
當我使用該庫的舊版本(無ARC)時,項目編譯通常正常進行。
問題是,您正在通過包含將ARC違規構造混合到ARC'd文件中。您不能將-fno-objc-arc
應用於單個頭文件,因爲這沒有意義。
由於它位於頭文件中,因此需要使用#if雜注在行爲之間切換,具體取決於是否正在編譯ARC或非ARC .m文件。
但是,一個更好的解決方案是完全消除ARC和非ARC的問題。鑑於該聲明,它幾乎必須是一個實例變量(儘管它可能在一個結構中)。
如果是伊娃,完全擺脫聲明。要麼通過@property
公開它,要麼將它移動到.m
文件,如果它不需要公開API。鑑於類型,它確實應該是一個具有公共API的私有實現細節,這使得訪問內容的能力變得更小一點。
通常,使用C語言數組(指針數組)來存儲Objective-C類型是非常令人沮喪的。如果_controls
確實需要作爲公開訪問的東西公開(對您項目中的其他類進行公開),然後重構您的代碼以使用集合類(即通常爲具有內部唯一NSMutableArray*
支持存儲的公開的NSArray*
獲取方 - 例如例如subviews
,UIView
)。
正如你在評論中所說的那樣,預編譯的頭文件包含了一個類頭文件,該頭文件並不打算用ARC編譯。這是導致錯誤的原因,因爲預編譯的頭文件也包含在所有用ARC編譯的SBJson文件中。
我建議您從.pch文件中刪除該類頭文件,並在必要時僅從非ARC源文件中包含它。
不幸的是,我無法從.pch中刪除這個文件。但我決定使用SBJSon的靜態庫。 – alexeyB
你能不能至少給出錯誤的行 – Ushan87
try id _controls;沒有* – Ushan87
如果您已經爲SBJson文件設置了「-fobjc-arc」,那麼爲什麼您的代碼使用ARC編譯爲「id * _controls;」? –