在一个非常大的项目中我到处都使用了自动合成的属性:
//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上宣传的“少写代码”理念的退步吗?
答案 0 :(得分:1)
我遇到了同样的问题。
在Apple的指导下,我虔诚地使用self.
之外的init
和_
init
。
当您在Xcode 5中迁移到ARC时,这会中断。
我发现最简单的方法是:
@synthesise deviceName = _deviceName;
更改所有引用只是愚蠢,痛苦和错误,对于只读变量,甚至不是一个选项。
自动完成功能在设置综合语句时非常聪明,您只需要将它们用于init
中要访问的内容。