Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 只综合所需内容是一个好的内存管理实践吗?_Objective C - Fatal编程技术网

Objective c 只综合所需内容是一个好的内存管理实践吗?

Objective c 只综合所需内容是一个好的内存管理实践吗?,objective-c,Objective C,我正在创建一个具有多个样式的自定义视图类。这意味着某些属性有时可能会初始化,而另一些属性可能不会初始化。只合成每次使用的属性是否明智 例如: 以下是它包含的属性: @property (nonatomic, assign) NSUInteger style; @property (nonatomic, retain) UIImageView *imageView; @property (nonatomic, retain) UILabel *descriptionLabel; - (id)ini

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

例如:

以下是它包含的属性:

@property (nonatomic, assign) NSUInteger style;
@property (nonatomic, retain) UIImageView *imageView;
@property (nonatomic, retain) UILabel *descriptionLabel;
- (id)initWithStyle:(NSUInteger)style;
如果样式为StyleDefault,则上述所有内容都将初始化并使用。如果样式为StyleMinimal,则仅初始化和使用imageView


仅合成imageView是一种良好的内存管理做法吗?

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

最新的编译器版本将自动合成您的属性。它们都应该用nil值初始化,所以在试图访问代码中的那些属性时请记住这一点。

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


在XCode4.4+编译器中,您不需要显式地进行合成,编译器会为您进行合成。因此,如果您已经创建了属性(XCode4.3编译器及以下版本),那么您就不能在那里执行任何操作,否则您将收到警告消息。


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

我想你误解了合成性质的本质

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


因此,在你的问题中——无论你合成的属性可能被使用或不被使用,都不会影响你应用程序的内存使用。

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

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


所以,在你的问题中——不管你合成的属性可能被使用或不被使用,这对你的应用程序的内存使用都没有影响。

这意味着我真的不需要合成任何东西,对吗?因为它们是自动合成的。正确,而且“retain”关键字不再用于ARC代码。你想在属性声明中使用“强”或“弱”。我理解强和弱的区别,但是你能举例说明在哪里使用它们吗?这个问题的答案可能相当长。我建议你在上面搜索一下,研究一下这两个关键词之间的区别,以及什么时候使用它们是合适的!这意味着我真的不需要合成任何东西,对吗?因为它们是自动合成的。正确,而且“retain”关键字不再用于ARC代码。你想在属性声明中使用“强”或“弱”。我理解强和弱的区别,但是你能举例说明在哪里使用它们吗?这个问题的答案可能相当长。我建议你在上面搜索一下,研究一下这两个关键词之间的区别,以及什么时候使用它们是合适的!你不必合成属性。现代LLVM编译器将为您进行自动合成,或者您可以编写自己的setter和getter,这不会引起警告。@Abizern:是的,您是对的,我更新了我的答案,现在可以了吗?您不必合成属性。现代LLVM编译器将为您自动合成,或者您可以编写自己的setter和getter,这不会引起警告。@Abizern:是的,您是对的,我更新了我的答案,现在可以了吗?