【发布时间】:2010-01-11 09:05:17
【问题描述】:
我对 iPhone 程序中的 dealloc 函数有一些疑问。是否需要给 [self.object_name release] 或 [object_name release] 可以吗?.. 我的dealloc函数中有这个奇怪的问题是这样的。
-(void) dealloc {
[self.listOfDates release];
[self.listOfDescriptions release];
[super dealloc];
}
但程序崩溃并给出 EXEC_BAD_ACCESS。这里两个对象都是 NSMutableArray 实例,在类的 init 函数中分配了 alloc。没有 self 的相同功能可以正常工作,即
-(void) dealloc {
[listOfDates release];
[listOfDescription release];
[super dealloc];
}
这是我声明属性的方式
@property (nonatomic,retain) NSMutableArray *listOfDates;
@property (nonatomic,retain) NSMutableArray *listOfDescription;
在实现文件中我对它进行了 sysnthesized,在 init 函数中我已经像这样分配了这些变量
self.listOfDates = [[NSMutableArray alloc] init];
self.listOfDescription = [[NSMutableArray alloc] init];
所以需要给 self 吗?我在这里错过了什么?
当我删除 mutableCopy 函数时问题已解决,该函数用于复制 NSMutableArrays 实例,该实例作为参数传递给 init 函数,如下所示
-(id)initWithDate:(NSMutableArray *)dates andDescription:(NSMutableArray*)descriptions
{
if(self = [super initWithNibName:@"DateDescriptionControl" bundle:nil])
{
self.listOfDates = [[NSMutableArray alloc] init];
self.listOfDescription = [[NSMutableArray alloc] init];
self.listOfDates = [dates mutableCopy];
self.listOfDescription = [description mutableCopy];
}
return self;
}
删除 mutableCopy 后,dealloc 现在不会抛出 EXEC_BAD_ACCESS。所以我在哪里犯了我仍然无法弄清楚的错误:(
【问题讨论】:
-
是类的 listOfDates 和 listOfDescription 属性吗?
-
是的,它是具有非原子和保留类的属性
-
你不应该在这里使用
self.。 -
在 initWithDate, self.listOfDates = [dates mutableCopy];会导致内存泄漏。您需要释放 mutableCopy 返回的内容。有关更多说明,请参阅stackoverflow.com/questions/1087689/…。我建议不要在 init 和 dealloc 中使用点符号。
-
顺便说一下,您使用可变对象作为属性。这个stackoverflow.com/questions/816720/… 可能会有所帮助。
标签: iphone