我在我的类的标题中声明了一个MutableArray rqst_entries 作为属性并合成它。 在viewdidload中,我添加了以下代码:
self.rqst_entries = [NSMutableArray array];
它是否会将此ivar变为自动释放并且可能更早发布(在调用dealloc之前)
求助,
的Stephane
答案 0 :(得分:5)
如果您已将自己的财产定义为retain
或copy
,那么它将由ivar持有,您将没事。另一方面,如果您将属性定义为assigned
,则会因为[NSMutableArray array]自动释放而遇到问题。
答案 1 :(得分:3)
如果您的媒体资源为retain
或copy
,则不会。
答案 2 :(得分:3)
如果您的财产被保留,那么您没事。您已为自己的财产分配了一个自动释放的对象,但此操作已为您保留了该对象。
答案 3 :(得分:1)
[NSMutableArray array]返回一个自动释放的对象。
每个人的答案都与财产rqst_entries
有关。基本上,您需要一个内存模型为retain
的属性。在某些情况下,您可能希望使用copy
,但这通常用于不可变类型(NSArray,NSString等)。 NSMutableArray是可变的(您可以添加条目,删除条目和修改数组中的条目)。
您想要定义您的属性,如:
@property (nonatomic, retain) NSMutableArray *rqst_entries;
真正引起人们兴奋的部分是在属性分配中执行alloc / copy / retain,如:
self.rqst_entries = [[NSMutableArray alloc] init];
因为除非后续发布
,否则会泄漏[self.rqst_entries release];
在这种情况下,分配的最佳方法是使用局部变量(至少在需要线程安全时)。像:
NSMutableArray *myArray = [[NSMutableArray alloc] init;
self.rqst_entries = myArray;
[myArray release];
我意识到这是一个非常简单的例子,但它确实说明了这一点。