0

我正在將我的Objective-C Cocos2d項目轉換爲ARC,並且在嘗試轉換擴展某些其他類的第三方類時發現了一些問題。ARC轉換問題,它是否識別擴展?

下面是ARC錯誤信息獲取:

enter image description here

在問題中顯示的靜態方法是在擴展一些其他類的SneakyExtension.h文件(SneakyButton,SneakyButtonSkinnedBase,SneakyJoystick定義.. )以這種方式(我只共享的代碼由斯特芬Itterheim copyrigthed接口):

@interface SneakyButtonSkinnedBase (Extension) 
+(id) skinnedButton; 
@end 

@interface SneakyJoystick (Extension) 
+(id) joystickWithRect:(CGRect)rect; 
@end 

@interface SneakyJoystickSkinnedBase (Extension) 
+(id) skinnedJoystick; 
@end 

你可以在這裏找到源代碼:look at the ShootEmUp03 example in chapter 8

我唯一的猜測是,擴展關鍵字不知何故不支持ARC,但我有我錯了的感覺,因爲我還沒有發現太多的谷歌與這個問題,以及既不#2或「過渡以ARC「Apple的iTunes U教程。

任何幫助將不勝感激。

+0

您確定您要爲SneakyJoystick類和擴展名導入.h文件嗎? –

+0

@PhillipMills是的,你是砰的一聲。我認爲它沒問題,因爲它在運行時沒有問題(在嘗試轉換之前)。現在我直接導入了「SneakyExtensions.h」,它可以導入所有其他頭文件,這很好(現在需要檢查下一個ARC錯誤,但這是一個單獨的業務)。我無法安靜地理解它之前如何設法運行..任何提示?你想發表你的評論作爲答案,我會接受它,所以你得到一些觀點? – mm24

回答

2

導入所需文件。 :-)

我最好的猜測是爲什麼它的工作原理是編譯器比現在更關注正確的聲明。爲什麼應該是這種情況,我不知道。但最終,運行時會得到最終的投票結果,只要實際上有一個鏈接到您的應用的joystickWithRect方法,即使它的應該是是一個編譯器錯誤根據一些標準,更早的版本。

你現在遇到什麼不影響程序的行爲;只是編譯器試圖確保你說的是正確的。

+0

ARC需要查看方法聲明來推理該方法的返回值和內存管理含義。 –

2

在ARC下編譯時,需要公開聲明並導入joystickWithRect方法以使用它。編譯器需要訪問方法聲明,因爲它可能已被定義爲像NS_RETURNS_RETAINED這樣的屬性,它改變了編譯器需要生成的保留/釋放調用。

以前,開發人員需要處理保留和釋放,所以編譯器可以讓您調用選擇器,即使它們以前沒有聲明過。

+0

感謝您的回答。 +1。我沒有接受它作爲最後的決定,因爲菲利普在他的評論中提供了類似的正確答案,但我很高興這兩個解釋,我非常感謝你的貢獻(讚賞)。 – mm24

+0

沒問題,請注意,這個錯誤特別與ARC相關,而不是像其他答案所示的更嚴格的編譯器的結果。 –

+0

謝謝,我會盡量讓我的頭在ARC。除了iTunes U材質和apple.developer之外,你有沒有找到好的指南? – mm24