实例变量/属性的目标C多个声明(Objective C multiple declarations

2019-09-18 03:26发布

我仍然很新的ObjC。 我注意到,这是非常标准的,到处创建

@interface myObj : NSObject {
    id delegate;
    NSDictionary *dict;
}

接着

@property (nonatomic,retain) NSDictionary *dict;
@property (retain) id delegate;

- 例如。 我知道,自动代码生成+ @属性的更明确的定义是多么有用得益于声明属性页中有超过苹果。 我不明白,但是,这就是为什么它是标准的为人民做两个 - 申报其属性,然后在{大括号}再有他们。

我的意思是,如果我有一个类,我想一些变量有自动getter / setter方法以及一些没有的话,我会理解为对我的正常瓦尔的{}块,然后只创建@财产/ @合成报表只是那些特定的变量我想有增加的功能; 但为什么它的标准始终有两个在你知道你希望所有实例的瓦尔有getter和setter的情况下? 我想我绊倒了,因为我基本上看到它使用类似的时间这100%的时候我觉得它确实是没有必要的...只是声明@properties,并留在这一点。

思考? 最佳的编码实践的建议? 或者是有一些信息,我在这里失踪?

Answer 1:

你看到的是需要在早期版本的Objective-C的,但没有任何更多。

在明年使用,直到新的运行时介绍了Objective-C中的第一个版本(与Objective-C的2.0在Mac OS X),所有实例变量必须声明为类在其结构的一部分@interface 。 其原因是,如果你的子类一类,需要编译器知道的类的实例变量的布局,因此它可以在哪一个偏移把子类的实例变量看。

当特性进行了介绍,综合性能已经通过在类的结构实例变量被“支持”。 因此,你不得不宣布两个实例变量和属性。

以上所有的不再是真实的。 较新的Objective-C是它查找实例变量偏移的方式,这意味着一些变化那么脆弱:

  • 不是所有的实例变量必须在@interface 。 他们现在可以在定义@implementation :虽然不是因争食等问题的可能性类别。
  • 对于合成特性实例变量可以推断,并根据属性定义创建。
  • 您可以以编程方式添加的实例变量你在运行时创建类(只有你已经注册为系统可用的前级)。

因此,要重申,你只需要同时声明实例变量,并在老版本的Objective-C语言的综合性能。 你看到的是多余的,不应该被认为是“最佳实践”。



Answer 2:

我倾向于私有不过,你说的没错,当你说“真的是没有必要的”思考性的作为我的公共变量等。

如果省略了伊娃,还是创建伊娃

我同时创建,让所有我的ivars的在一起,并在括号内刚的界面声明之后

@interface MyClass
{
    int variable1;
}
@end


文章来源: Objective C multiple declarations of instance variables / properties