iOS – Objective C – 关于属性的问题

可能重复:
财产申报和自动备份分配

我对Objective-C相当陌生,我想问一个基本的问题。 我想弄清楚下面两个例子有什么区别:

@interface MyViewController : UIViewController { UIImageView *myImageView; } @property (nonatomic, retain) UIImageView *myImageView; @end 

和:

  @interface MyViewController : UIViewController { } @property (nonatomic, retain) UIImageView *myImageView; @end 

什么是正确的方法? 我知道财产的使用和财产是什么意思。 问题是第一个例子和第二个例子有什么不同? 内存有差别吗?

提前致谢,

安德烈亚斯

第一个示例使用该属性的显式支持variables。 那就是:你已经定义了支持variables,并且可以直接访问它。

在第二个例子中,Objective-C 隐式地为你创build了后备variables。 既然你不知道它的名字,你不能直接访问它。

但是,您可以告诉Objective-C如何命名它:

  @synthesize myImageView = myImageViewVariable; 

现在你可以直接访问myImageViewVariable 。 如果您想使用不同的备份variables,也可以使用相同的语法。 例如,我喜欢这样做:

  @interface Foo : NSObject { Bar *baz_; } @property (nonatomic, retain) Bar *baz; @end @implementation Foo @synthesize baz = baz_; @end 

这是一个有趣的问题,我只是想为支持variables命名。 我不需要明确地声明,但我不喜欢隐式的行为。

第二种方法使用dynamicIvars。 看到这个伟大的文章: http : //cocoawithlove.com/2010/03/dynamic-ivars-solving-fragile-base.html

第二个需要现代运行时间 – 这是iOS和64位的Mac OS X

当您在实现中合并属性时,可以定义后备存储。