【发布时间】:2012-10-11 23:11:49
【问题描述】:
我有一个UIView,其中包含一个UITableView。此表由 NSMutableArray 填充。
我在 UIView 的 initWithFrame: 方法中初始化了数组和表格。
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
bookTable = [[UITableView alloc]initWithFrame:CGRectMake(100, 108, 260, 535)];
bookArray = [[NSMutableArray alloc]init]; //this array will be populated later
//other codes
}
return self;
}
我在dealloc发布它们:
- (void)dealloc
{
[bookTable release];
[bookArray release];
[super dealloc];
}
问题是当应用程序在dealloc 中崩溃时。它产生错误:[CALayer release]: message sent to deallocated instance 0x82db660
我在我的代码中到处查看,我确信我没有过度发布任何东西。我决定删除dealloc 中的[bookArray release],它就停止了崩溃。我运行了Analyze,它没有给我任何潜在的泄漏。
谁能解释一下为什么在 dealloc 中释放数组会导致崩溃?
注意: 表和数组都是视图的实例变量。
编辑: 填充数组的代码:
NSString *sql = [NSString stringWithFormat:@"SELECT BookName FROM books WHERE UserID=%d", userId];
booksArray = [sqlite executeQuery:sql];
请注意,我使用的是 sql 包装器。
【问题讨论】:
-
只要确保您没有为项目启用 ARC。
-
如果启用了 ARC,编译器将不允许使用 [super dealloc]...
-
你能提供你用来填充数组的代码吗?
-
@Tobi 我在上面添加了代码。
-
@AnnaFortuna 如何向
bookArray添加元素?
标签: ios memory-management memory-leaks nsmutablearray