5

在一个非常大的项目中,我到处都使用了自动合成的属性:

//MyClass.h file:
@interface MyClass : NSObject

@property (nonatomic, retain) NSString *deviceName;
@property (nonatomic, retain) NSString *deviceID;

@end

//MyClass.m file:
#import "MyClass.h"

@implementation ApplicationStatus
// no @synthesize used at all.

-(void)dealloc{

    [_deviceName release]; // gives errors only while converting to ARC with LLVM 5.0
    [_deviceID release];

    [super dealloc];
}

@end

上面的代码在非 ARC 模式下编译良好,在 ARC 转换过程中也可以在旧 Xcode 版本中编译。当尝试使用最新的 LLVM 5.0 编译器(最新的 Xcode)进行转换时,它给了我数百万个错误: 在此处输入图像描述

这是什么原因?我现在是否必须手动创建数百个实例变量并手动 @synthesize 它们?这不是从苹果在所有 WWDC 上宣传的“少写代码”理念退后一步吗?

4

1 回答 1

1

我只是遇到了同样的问题。

在 Apple 的指导下,我虔诚地使用self.outsideinit_in init. 当您在 Xcode 5 中迁移到 ARC 时,这会中断。

我发现最简单的方法是:

@synthesise deviceName = _deviceName;

更改所有引用只是愚蠢、痛苦和错误的,对于只读变量,甚至不是一个选项。

自动完成在设置综合语句方面非常聪明,您只需要它们来处理您要访问的内容init

于 2013-10-16T13:25:22.987 回答