我有一个UIView
包含一个UITableView
. 此表由NSMutableArray
.
initWithFrame:
我在 UIView 的方法中初始化了数组和表。
- (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
我在我的代码中到处查看,我确信我没有过度发布任何东西。我决定删除[bookArray release]
in dealloc
,它停止崩溃。我跑了Analyze
,它没有给我任何潜在的泄漏。
谁能向我解释为什么在 dealloc 中释放数组会导致崩溃?
注意: 表和数组都是视图的实例变量。
编辑: 填充数组的代码:
NSString *sql = [NSString stringWithFormat:@"SELECT BookName FROM books WHERE UserID=%d", userId];
booksArray = [sqlite executeQuery:sql];
请注意,我使用的是 sql 包装器。