问题描述
|
好了,下面的问题解决了,但是现在它为该块创建了泄漏
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)在“ 2”中为其分配内存
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
中将其设置为nil
解决方法
每次出现该视图时,您都会分配
pickerList
。在viewDidLoad
中分配它,然后在viewDidUnload
中释放它。
, 在viewWillAppear
中,您正在分配内存。如果要切换到该视图控制器或从该视图控制器切换到该视图控制器,则将调用viewWillAppear
,并且将一次又一次地分配内存。
在viewDidLoad
中进行操作,并在分配时使用其属性。
, 使用综合setter方法在ѭ8中设置数组
self.pickerList=[NSMutableArray array];
并在viewDidUnload
中将其设置为nil
self.pickerList = nil;
泄漏的原因是因为您可能在ѭ6中叫calling18ѭ
pickerList = something
和self.pickerList = something
之间有区别。在第一个实例中,您直接设置值,但是如果使用第二个版本(并且已声明@property (retain) NSMutableArray *pickerList
,则@synthesized setter方法将保留新值并释放旧值。
在您的情况下,只需在viewDidUnload
中将其设置为nil,就会丢失指向原始对象的指针,因此无法释放它,并且存在泄漏。