我正在将代码从非ARC转换为ARC,并删除了一些不必要的@synthesize调用。 一个特定的类开始为某些属性发出警告:
Class.h
@property (strong, nonatomic) NSString *xyz;
但在建设时,我会收到警告。
Property 'xyz' requires method 'xyz'to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation
我认为使用Xcode 4.6和Default Apple LLVM编译器4.2,@properties应该是自动合成的。
如何告诉编译器自动合成属性? 我是否必须使用特定的项目配置来删除此警告?
答案 0 :(得分:37)
此属性是否在NSManagedObject
子类上? NSManagedObject
正确禁用自动合成,因为大多数声明的属性都应为@dynamic
。
这是通过NS_REQUIRES_PROPERTY_DEFINITIONS
宏放置在@interface NSManagedObject
之前完成的,该宏扩展为__attribute__((objc_requires_property_definitions))
。这也可以在其他类上使用,但NSManagedObject
是我所知道的唯一这样做的框架类。