2013-03-12 57 views
0

我正在创建一个具有多种样式的自定义视图类。这意味着某些属性有时可能被初始化,而有些属性可能不会被初始化。只综合每次使用的属性是明智的吗?只需要合成一个好的内存管理实践?

例如:

这是它所包含的属性:

@property (nonatomic, assign) NSUInteger style; 
@property (nonatomic, retain) UIImageView *imageView; 
@property (nonatomic, retain) UILabel *descriptionLabel; 
- (id)initWithStyle:(NSUInteger)style; 

如果样式是StyleDefault然后所有上述将被初始化和使用。如果样式是StyleMinimal只有imageView将被初始化和使用。

综合只有imageView是一个很好的内存管理实践吗?

回答

1

最近的编译器版本会自动综合你的属性。它们都应该用零值进行初始化,所以在试图访问代码中的这些属性时请记住这一点。

+0

这意味着我真的不需要综合任何东西,对吧?因为它们是自动合成的。 – 2013-03-12 16:04:06

+0

正确,并且“保留”关键字不再用于ARC代码。你想在你的财产声明中使用'strong'或'weak'。 – JiuJitsuCoder 2013-03-12 16:06:50

+0

我明白强弱之间有什么区别,但你可以在哪里使用它们作为例子吗? – 2013-03-12 16:40:07

0

如果您已经创建了属性(XCode4.3编译器及以下版本),那么您应该综合它,否则您将收到警告消息。

而在XCode4.4 +编译器中,您不需要显式合成,编译器会为您做。所以你不能在那里做任何事

+1

您不必综合属性。现代的LLVM编译器会为你自动合成,或者你可以编写你自己的setters和getters,这不会引起警告。 – Abizern 2013-03-12 16:08:20

+0

@Abizern:是的,你说得对,我更新我的答案,现在可以吗? – 2013-03-12 16:11:07

2

我想你误解了综合性质的本质。

声明该属性不会为该属性创建内存,您自己这样做。合成只需设置KVC设置器和获取器 - 而现代版本的Xcode则不需要这样做。

所以,在你的问题 - 你的应用程序的内存使用无论你是否综合可能使用或不使用的属性都没有区别。