2014-03-24 147 views
9

閱讀ProgrammingWithObjectiveC,我可以說:從屬性中省略/刪除'strong'屬性時出現警告?

沒有必要明確指定的強屬性,因爲它是默認的。

如果我忽略了在我的項目這樣的屬性「強」屬性,

@property (nonatomic) NSString *string; 

它給了我一個警告:

沒有「分配」,「保留」 ,或'copy'屬性被指定 - 'assign'被假定爲

aka。

-Wobjc屬性,無屬性

於是莫名其妙的編譯器似乎認爲I'm還在做手工引用計數,否則也不會轉回去是任何警告。另外,當創建一個新的空項目時,如果沒有「強」屬性,它不會提醒我,所以它必須與當前項目設置有關,甚至可能是某些不是標誌,而是一些標誌,不是可通過用戶界面訪問。該項目是一個相當老的項目(約2年),同時經歷了幾個遷移步驟(XCode 3> 4> 5,非ARC> ARC等)。

我在項目設置中無處不在,但某處似乎缺少複選標記或其他東西。

任何人遇到同樣的問題?

+0

我沒遇到過這個問題,但是在你的編譯日誌中應該有一個警告標識符「-Wsomething」。也許這提供了一些線索。知道這個警告後,你可以明確地用'-Wno-something'編譯器禁用它。 –

+1

我不想禁用這個警告,我想知道編譯器有什麼問題。 :) – stk

+1

我明白,(我不知道它來自哪裏)。我的想法是,警告的「名稱」可能會提供一些提示。你有沒有在構建日誌中找到它? –

回答

1

確保您擁有最新版本的Xcode。這是一個新的編譯器功能,它的工作原理在最近的更新中多次更改。

確保您的項目配置爲使用clang/llvm而不是gcc。我不記得gcc是否支持ARC(可以有人評論他們知道嗎?)但它絕對不支持所有功能。一箇舊的Xcode項目將使用gcc,除非你改變它。所有最近的語言更改僅在clang/llvm中實施

您是否啓用ARC?這將改變行爲,因爲我們會提醒ARC可以啓用或禁用項目範圍或特定文件。

Xcode中的一些更改僅適用於新項目,舊項目已配置爲禁用它們。查看未設置爲默認值的ARC相關設置。

+0

我確認在Xcode 4.3之前,@property的默認值是weak/assign(我不記得具體是哪個)。在Xcode 4.3中改變的行爲與局部變量相同(默認情況下總是爲__strong) – LombaX

+0

「Xcode中的一些更改只適用於新項目,舊項目已配置爲禁用它們。查看相關設置到未設置爲默認值的ARC。「 <我正在尋找這個配置設置,適用於新的項目,但不適用於舊的遷移項目。是的:我正在運行Xcode 5.1,使用LLVM,ARC在項目範圍內,與ARC相關的所有內容都設置爲默認值(即,不以粗體字顯示)。 – stk

+0

@sdk只是爲了確定,你是否檢查過'Target - > Build Phases - > Compile Sources'來驗證文件沒有'-fno-objc-arc'? –

3

剛剛搜索過它,最接近的建設財產將是CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES我懷疑有任何關係。

您可以通過在Build Settings視圖中選擇「All」和「Levels」選項來檢查目標覆蓋的默認參數。

enter image description here

檢查的警告,默認爲無,但正在變成是你的目標。

+0

+1級別選項 – stk

+0

...但是,我不想讓警告關閉,我想修復我的項目文件。 – stk

+0

如果你認爲它是一個錯誤,你只需要「修復」它。默認情況下,Xcode認爲忽略'strong'並不是一個錯誤,如果你認爲它是一個錯誤(通過啓用該標誌),那麼你只需在缺少的地方添加'strong'來修復它。否則,你清除標誌,沒有什麼可以修復的,因爲你不再認爲它是一個錯誤。 – Rivera