2012-09-17 197 views
7

我有一個Xcode 3.2目標項目。我想將此項目轉換爲ARC以改善將非ARC項目轉換爲ARC

的性能。我正在執行這些步驟。

編輯 - > Refactor->轉換成Objective C的ARC

我已經得到了一些.mm文件到我禁用使用-fno-objc弧的弧。但即使在

這我收到很多錯誤(ARC問題)。用於例如主要是在自我= [超級INIT]呼叫時,

誤差不能分配給自在init家族的方法之外。可以

有人告訴我我遵循正確的步驟嗎?

回答

15

我是想一謨轉換爲ARC和從舊創建一個新的,包括文件後 - 我得到的問題之一是

無法分配到「自我」的外方法在init家庭

的選擇名稱必須以init開始 - 不僅如此 - 在我的情況初始化選擇是:

-(id)initwithPage:(unsigned)pageNum {...} 

注意小'w'。

我已經把它改爲:

-(id)initWithPage:(unsigned)pageNum {...} 

通知資本 'W'!

我的問題解決了。

我希望這可以幫助別人。

+1

即使我也在我的XCode中觀察過它。 – Raj

+1

附加說明:在LLVM的文檔中提到了這一點(雖然非常巧妙):「選擇器在某個選擇器族中,如果忽略任何前導下劃線,選擇器的第一個組件完全由方法族的名稱組成,或者它以名稱開頭,後面跟着字符**,而不是小寫字母。**「 – Xono

+0

並且不要忘記 - (id)返回值! – JeanNicolas

1

雷Wenderlich的教程有一個不錯的ARC-轉換兩部分教程採取哪些應詳細正確的步驟:Part 1Part 2

在您遇到的描述幾乎總結起來誤差的條款:您正在使用不符合the standard for init methods的方法分配到self。我不能說這是否是合法的ARC之前,但它現在已經不復存在了。爲了解決這個問題,可以將它作爲一個init方法(遵循初始化方法,將一個超級初始化方法調用爲self,初始化任何值並返回self),或者將其賦值給self。對於其他錯誤,請發表任何您遇到問題的帖子(其中很多內容都在Ray的教程中介紹),我們會盡我們所能。

+1

這是完全合法的,但問題是:在什麼情況下,你想要在'init'方法外分配'self'? – nielsbot

+1

他的方法完全可能具有init風格的行爲,但是不會返回init-ed對象(即調用'obj = [Obj alloc];''[obj initWithData];'initWithData返回void)。因爲init方法必須返回一個指針,所以它會在ARC之前運行良好,但是在轉換時會導致大量問題。幸運的是,如果就是這樣,它應該只是更新聲明的問題。 – Xono