我正在将Objective-C Cocos2d项目转换为ARC,并且在尝试转换扩展其他类的第三方类时发现了一些问题。
以下是我收到的ARC错误消息:
问题中显示的静态方法在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教程。
非常感谢任何帮助。
答案 0 :(得分:2)
导入所需文件。 : - )
我最好猜测它为何起作用,编译器现在比正确的声明更正确。为什么会这样,我不知道。但最后,运行时最终会对哪些内容有效,并且只要有一个joystickWithRect
方法链接到您的应用中,即使它应该< / strong>在早期版本中是编译器错误 - 根据某些标准。
您现在遇到的不会影响该计划的行为;只是编译器试图确保你告诉它是正确的。
答案 1 :(得分:2)
在ARC下进行编译时,需要公开声明并导入joystickWithRect
方法以供您使用。编译器需要访问方法声明,因为它可以使用类似NS_RETURNS_RETAINED
的属性进行定义,这样可以更改编译器需要生成的保留/释放调用。
以前,开发人员需要处理保留和发布,因此编译器允许您调用选择器,即使它们之前未被声明过。