我已经做了几年的Objective-C编程。前几天我正在收听一个播客,其中提到了Apple多年来如何让它变得更容易,我想我已经听说过现在没有必要手动添加实例变量了。这是真的?以下是我目前的工作方式:
·H:
@interface Class : UIView
@property (nonatomic, strong) NSString *testString;
@end
的.m:
@interface Class () {
NSString *_testString;
}
@end
@implementation Class
@synthesize testString = _testString;
这项工作是否必要?
答案 0 :(得分:17)
这就是你现在所需要的一切
·H:
@interface Class : UIView
@property (nonatomic, strong) NSString *testString;
@end
的.m:
@implementation Class
@end
答案 1 :(得分:2)
@property
现在会自动创建一个实例变量,除非另行指定,否则会自动添加@synthesize
。所以是的,只需@property
即可。
答案 2 :(得分:1)
不,它会在Xcode 4.4 +
中自动合成您可以详细了解here。
答案 3 :(得分:1)
所有这些工作都是不必要的。
只需声明属性,它将自动默认使用下划线约定创建实例变量。虽然,self.property也可能会引起你的幻想。
您可以通过在.m文件的接口扩展中声明它们来为私有属性执行相同的操作。
不再需要@ synthesize-ing。如果我理解正确的话,仍然需要@dynamic
答案 4 :(得分:1)
虽然从LLVM 4.0(Xcode 4.4+)开始,您不需要为非@dynamic
属性键入该样板代码,但知道它是编译器功能,而不是语言的一部分是一件好事。 (目标C),也不是运行时系统。运行时系统仍然依赖于@synthesize
指令生成的实例变量和getter / setter。编译器能够为您生成代码,就像它能够遵循约定并在ARC代码中生成对retain
和release
的调用一样。
因此,重要的是要注意,如果您要与使用旧版Xcode(特别是旧版本的Clang / LLVM编译器)的其他开发人员共享您的项目,您必须合成您的变量或项目将不能在他们的机器上编译或在运行时失败。