37

我正在尝试从图像数组在 iPhone 中制作一个简单的动画图像:

- (void)viewDidLoad {
    NSArray *imageArray;
    imageArray = [[NSArray alloc] initWithObjects:
                  [UIImage imageNamed:@"sun1"],
                  [UIImage imageNamed:@"sun2"],
                  nil];
    fadeImage.animationImages = imageArray;
    fadeImage.animationDuration = 1;
    [imageArray release];  //==== HERE IS WHERE I GET THE ERROR ======

我怎样才能解决这个问题?

4

1 回答 1

80

解决方案#1:

只需删除发布声明。ARC 将为您管理。

[imageArray release]; // remove this line

ARC 是自动引用计数。与手动引用计数相反。
WWDC 有一些很棒的演讲视频。如果您想观看它们,我可以提供链接。

过渡到 ARC 发行说明中,请参阅ARC 强制执行新规则

您不能显式调用 dealloc,或者实现或调用 retain、 release、retainCount 或 autorelease。

禁止扩展到使用@selector(retain)、@selector(release) 等。

解决方案#2:

如果您不希望将代码转换为 ARC(例如,您不是在编写新应用程序,而是在维护旧应用程序/或者您导入了太多代码以至于不值得迁移到 ARC),您可以禁用 ARC。

  • 为选定文件禁用 ARC 要禁用 ARC,您可以-fno-objc-arc对特定文件使用编译器标志。选择目标并转到Build Phases-> Compile Sources。编辑Compiler Flags并添加-fno-objc-arc

  • Disabling ARC for the project
    Source: How to disable Xcode4.2 Automatic Reference Counting

    • 在左侧的管理器中单击您的项目。
    • 选择你的目标,在下一列中结束。
    • 选择顶部的构建设置选项卡。
    • 向下滚动到“Objective-C 自动引用计数”(它可能被列为
    • “CLANG_ENABLE_OBJC_ARC”在用户定义的设置组下),并将其设置为 NO。
于 2013-04-05T21:43:53.983 回答