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
当您在实现中合并属性时,可以定义后备存储。