只合成所需要的是良好的内存管理实践?

时间:2013-03-12 16:00:15

标签: objective-c

我正在创建一个包含多个样式的自定义视图类。这意味着某些属性有时可能会被初始化,而有些属性可能不会被初始化。仅合成每次都会使用的属性是明智的吗?

例如:

这是它包含的属性:

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

如果样式为 StyleDefault ,则会初始化并使用上述所有内容。如果样式为 StyleMinimal ,则只会初始化并使用imageView。

仅合成imageView是一个很好的内存管理实践吗?

3 个答案:

答案 0 :(得分:2)

我认为你误解了合成属性的本质。

声明属性不会为该属性创建内存,您可以自己创建。合成只是设置KVC设置器和getter - 使用现代版本的Xcode,你甚至不需要这样做。

因此,在您的问题中 - 无论您是否合成可能使用或未使用的属性,对应用程序的内存使用都没有任何影响。

答案 1 :(得分:1)

最近的编译器版本将自动合成您的属性。它们都应该使用nil值进行初始化,因此在尝试访问代码中的这些属性时请记住这一点。

答案 2 :(得分:0)

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

在XCode4.4 +编译器中,您无需显式合成,编译器也适合您。所以你不能做任何事情