如何确定我的项目是否使用自动引用计数

时间:2013-02-27 15:46:18

标签: objective-c memory-management automatic-ref-counting

我遇到了一个问题,我在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。我去了构建设置并搜索了自动引用计数,但找不到它。

如何判断我的项目是否使用自动引用计数?

3 个答案:

答案 0 :(得分:2)

试试这个:

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

答案 1 :(得分:1)

尝试

[player release];

它应该为您提供“ARC限制”错误

答案 2 :(得分: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中选择项目和目标时编译源代码。