2011-09-15 31 views
1

我已经在我的类的头文件中声明了MutableArray rqst_entries作为属性并将其合成。 在viewDidLoad中添加以下代码:这是一个保留或autorelease对象吗?

self.rqst_entries = [NSMutableArray array]; 

将它打开这个伊娃被自动释放,也许更早释放它(的dealloc被调用之前)

THX帮助,

斯特凡

+0

应该是有帮助的。 – UPT

+1

请添加代码,以确定如何定义rqst_entries属性,因为每个人都在此属性的内存模型中进行猜测。 – Sam

回答

5

如果您已将自己的房产定义为retaincopy,那么它将由ivar持有,您将会被罚款。如果你另一方面已经定义你的属性为assigned,你将遇到问题,因为[NSMutableArray数组]是自动发布的。

3

如果您的财产是retaincopy,则不应该。

3

如果你的财产被保留,那么你很好。您已将自动释放对象分配给您的媒体资源,但此操作已为您保留。

1

[NSMutableArray array]返回一个自动释放对象。

大家的回答都是关于房产rqst_entries。基本上,你需要一个内存模型为retain的属性。有些情况下你会想要使用copy,但这通常用于不可变类型(NSArray,NSString等)。 NSMutableArray是可变的(您可以添加条目,删除条目并修改数组中的条目)。

你要定义你的财产,如:

@property (nonatomic, retain) NSMutableArray *rqst_entries; 

,真正旅行的人最多做一个分配/复制/保留就像一个属性赋值的部分:

self.rqst_entries = [[NSMutableArray alloc] init]; 

,因为这将泄漏,除非随后发布

[self.rqst_entries release]; 

在这种情况下分配的最佳方式是使用al ocal变量(至少如果你需要线程安全)。像:

NSMutableArray *myArray = [[NSMutableArray alloc] init; 
self.rqst_entries = myArray; 
[myArray release]; 

我意识到这是一个很平凡的例子,但它确实说明了一点。

相关问题