0

我正在将我的 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

您可以在此处找到源代码:查看第 8 章中的 ShootEmUp03 示例

我唯一的猜测是ARC 不知何故不支持Extension关键字,但我觉得我错了,因为我在谷歌上没有找到太多关于这个的东西,也没有在 Stackoverflow 或“过渡到 ARC”Apple 的 iTunes U教程。

任何帮助将非常感激。

4

2 回答 2

2

导入所需文件。:-)

关于它为什么起作用,我最好的猜测是编译器现在比以前更注重正确的声明。为什么会这样,我不知道。但最终,运行时会获得对什么有效的最终投票,只要确实有一个joystickWithRect方法链接到您的应用程序,即使它应该是早期版本中的编译器错误,您在功能上也是可以的——根据一些标准。

你现在遇到的并不影响程序的行为;这只是编译器试图确保你告诉它正确的事情。

于 2012-06-29T13:53:29.883 回答
2

在 ARC 下编译时,joystickWithRect需要公开声明并导入该方法以供您使用。编译器需要访问方法声明,因为它可能已经定义了一个属性NS_RETURNS_RETAINED,例如更改编译器需要生成的保留/释放调用。

以前,由开发人员来处理保留和释放,因此编译器允许您调用选择器,即使它们之前没有被声明过。

于 2012-06-29T14:05:40.977 回答