如何修复此错误:"ARC禁止在Xcode中显式发送'release'消息"

Vic*_*rba 34 iphone animation objective-c automatic-ref-counting

我试图从图像数组中在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 ======
Run Code Online (Sandbox Code Playgroud)

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

Jea*_*ean 78

解决方案#1:

只需删除发布声明即可.ARC将为您管理它.

[imageArray release]; // remove this line
Run Code Online (Sandbox Code Playgroud)

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.

  • 为项目禁用ARC
    源:如何禁用Xcode4.2自动引用计数

    • 单击左侧组织者中的项目.
    • 在下一栏中选择您的目标.
    • 选择顶部的Build Settings选项卡.
    • 向下滚动到"Objective-C自动引用计数"(可能会列为
    • "用户定义的设置"组下的"CLANG_ENABLE_OBJC_ARC"),并将其设置为NO.

  • 不过,您可能应该详细说明解决方案#2。具体来说,`-fno-objc-arc` 标志是你的朋友。 (2认同)