2013-02-27 50 views
1

我遇到了一個問題,即我在cocos2D box2D項目中使用的對象被垃圾覆蓋。調試好位後,我發現,如果下面的行改爲從:我如何確定我的項目是否使用自動引用計數

player = [[[Player alloc] initWithWorld:world atLocation:ccp(playerPositionX, playerPositionY)] autorelease]; 

player = [[Player alloc] initWithWorld:world atLocation:ccp(playerPositionX, playerPositionY)]; 

然後問題消失。這非常令人困惑,因爲此代碼和基礎類定義或多或少是Learning Cocos2D書中描述的SpaceViking項目的代碼副本。

我想到,也許問題是,當我創建新項目時,我可能已經選擇了自動引用計數選擇,而我可能沒有爲SpaceViking項目完成這項工作。我目前正在使用xcode 4.6,並且無法弄清楚如何確定ARC是否在此項目中使用。我進入構建設置並搜索自動引用計數,但無法找到它。

如何確定我的項目是否使用自動引用計數?

+1

如果你能編譯一個到'autorelease'的調用,那麼你不能使用ARC注意你可以打開/關閉單個文件的ARC – bbum 2013-02-27 16:55:11

回答

2

試試這個:

#if __has_feature(objc_arc) 
/* ARC is used */ 
#endif 
+0

好吧,我把一個CCLOG您的建議#如果#ENDIF塊並沒有什麼內聲明打印出來。所以我認爲我沒有使用ARC,這是不幸的,因爲這意味着我仍然有一個問題,我CA不知道。 – JeffB6688 2013-02-27 16:31:10

+0

@ JeffB6688嘗試使用'-fobjc-arc'標誌進行編譯?這應該使自動參考計數。 – 2013-02-27 16:31:53

+0

+1高超的答案:) – 2013-02-27 16:36:05

1

嘗試

[player release]; 

它應該給你 「ARC限制」 錯誤

+0

好的,謝謝。我也嘗試了這一點,我沒有得到任何錯誤。所以我認爲我沒有使用ARC。這是不幸的,因爲這意味着我仍然有一個我無法弄清楚的問題。 – JeffB6688 2013-02-27 16:32:13

+0

這不是一個**應該如何檢查使用ARC。 – 2013-02-27 16:33:50

+1

好辦法檢查:) **如何檢查天堂是否真的存在? - 從艾菲爾鐵塔上跳,並檢查。** – 2013-02-27 16:35:47

1

你已經可以告訴你構建不ARC:它被啓用,您撥打autorelease將導致編譯器錯誤。這表明您的實際問題與ARC無關,當然 - 刪除autorelease調用可能會阻止對象被過度釋放,但也很可能導致泄漏。除此之外,除了到目前爲止已經提出的其他方法之外,您還可以在Xcode中找到通常在項目級或目標級上控制ARC的位置。在導航器中選擇您的項目,然後在Build Settings選項卡中的「Apple LLVM Compiler 4.2 - Language」下找到「Objective-C Automatic Reference Counting」(或使用頂部的搜索框查找「Automatic Reference Counting」 。或「ARC」如果您使用的是項目別人最初設置,你也不妨來檢查-fobjc-arc-fno-objc-arc標誌是否設定在每個文件級這是在構建階段 - >編譯源代碼時,你的項目和目標是在Xcode中選擇的

相關問題