ARC转换问题,它是否识别Extensions?

时间:2012-06-29 13:26:57

标签: objective-c ios xcode extension-methods automatic-ref-counting

我正在将Objective-C Cocos2d项目转换为ARC,并且在尝试转换扩展其他类的第三方类时发现了一些问题。

以下是我收到的ARC错误消息:

enter image description here

问题中显示的静态方法在SneakyExtension.h文件中定义,该文件以这种方式扩展了一些其他类(SneakyButton,SneakyButtonSkinnedBase,SneakyJoystick ..)(我只分享了接口,因为代码被Steffen Itterheim复制) :

@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支持,但我觉得我错了,因为我没有在谷歌上找到这个以及在Stackoverflow上都没有或“过渡到ARC”Apple的iTunes U教程。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

导入所需文件。 : - )

我最好猜测它为何起作用,编译器现在比正确的声明更正确。为什么会这样,我不知道。但最后,运行时最终会对哪些内容有效,并且只要有一个joystickWithRect方法链接到您的应用中,即使它应该< / strong>在早期版本中是编译器错误 - 根据某些标准。

您现在遇到的不会影响该计划的行为;只是编译器试图确保你告诉它是正确的。

答案 1 :(得分:2)

在ARC下进行编译时,需要公开声明并导入joystickWithRect方法以供您使用。编译器需要访问方法声明,因为它可以使用类似NS_RETURNS_RETAINED的属性进行定义,这样可以更改编译器需要生成的保留/释放调用。

以前,开发人员需要处理保留和发布,因此编译器允许您调用选择器,即使它们之前未被声明过。