3

我从事 Objective-C 编程已有几年了。前几天我在听一个播客,其中提到了苹果多年来如何让它变得更容易,我想我听说现在不需要手动添加实例变量。这是真的?这是我目前的做法:

。H:

@interface Class : UIView

@property (nonatomic, strong) NSString *testString;

@end

米:

@interface Class () {

NSString *_testString;

}

@end

@implementation Class

@synthesize testString = _testString;

这项工作有必要吗?

4

5 回答 5

17

这就是你现在所需要的

。H:

@interface Class : UIView

@property (nonatomic, strong) NSString *testString;

@end

米:

@implementation Class

@end
于 2013-05-01T19:15:27.753 回答
2

@property现在将自动创建一个实例变量,并@synthesize自动添加,除非您另有指定。所以是的,一个@property就足够了。

于 2013-05-01T19:13:49.027 回答
1

不,它会在 Xcode 4.4+ 中自动合成

你可以在这里阅读更多关于它的信息。

于 2013-05-01T19:13:08.607 回答
1

尽管自 LLVM 4.0 (Xcode 4.4+) 以来您不需要为非@dynamic属性键入样板代码,但知道它是编译器功能而不是语言 (Objective C) 的一部分或运行时是一件好事系统。运行时系统仍然依赖于@synthesize指令生成的实例变量和 getter/setter。编译器能够为您生成代码,就像它能够遵循约定并生成对 ARC 代码的调用retain一样release

因此,重要的是要注意,如果您要与使用旧版本 Xcode(特别是旧版本的 Clang/LLVM 编译器)的其他开发人员共享您的项目,您必须合成您的变量,否则项目将无法编译他们的机器或将在运行时失败。

于 2013-05-01T19:56:16.997 回答
1

所有这些工作都是不必要的。

只需声明该属性,它将自动默认创建具有下划线约定的实例变量。不过,self.property 也可能会引起你的兴趣。

您可以通过在 .m 文件的接口扩展中声明私有属性来对它们执行相同的操作。

@synthesize-ing 不再需要。如果我理解正确,@dynamic 仍然是必要的

于 2013-05-01T19:14:57.927 回答