好的,下面的问题已经解决,但现在它为这个块创建了泄漏
NSMutableArray *tempRowArray=[[NSMutableArray alloc] init];
[tempRowArray addObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)]];
[pickerList addObject:tempRowArray];
[tempRowArray release];
表示tempRowArray
啊,我在这段记忆中迷失了。解决: 您好,
你可以帮助我吗,我有以下条件
1)在.h
文件中声明了一个数组
2)创造属性并合成它
3)在viewWillAppear
分配的内存中
pickerList = [[NSMutableArray alloc] init];
4)从数据库中读取数据并在此数组中存储对象
if (sqlite3_prepare(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
while (sqlite3_step(compiledStatement) == SQLITE_ROW) {
NSMutableArray *tempRowArray=[[NSMutableArray alloc] init];
[tempRowArray addObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)]];
[pickerList addObject:tempRowArray];
[tempRowArray release];
}
}
选择器列表显示为内存泄漏 和应用程序最终崩溃一段时间后请帮我摆脱它
5)我在dealloc()
中发布了 pickerList ,并在viewDidUnload
答案 0 :(得分:4)
每次出现视图时,您都会分配pickerList
。在viewDidLoad
中分配,然后在viewDidUnload
中发布。
答案 1 :(得分:2)
在viewWillAppear
中,您正在分配内存。如果您正在切换到此视图控制器,那么您的viewWillAppear
将被调用,您将一次又一次地分配内存。
在viewDidLoad
中执行,并在分配时使用其属性。
答案 2 :(得分:2)
使用合成的setter方法在viewDidLoad
self.pickerList=[NSMutableArray array];
并在nil
viewDidUnload
self.pickerList = nil;
您收到泄密的原因是因为您可能在pickerList = nil
viewDidUnload
pickerList = something
和self.pickerList = something
之间存在差异。在第一个实例中,您直接设置值,但如果您使用第二个版本(并且您已声明@property (retain) NSMutableArray *pickerList
,则@synthesized setter方法将保留新值并释放旧值。
在你的情况下,只需在viewDidUnload
中将其设置为nil就会丢失指向原始对象的指针,因此你无法释放它,并且你有泄漏。