iPhone:奇怪的泄漏

问题描述

| 好了,下面的问题解决了,但是现在它为该块创建了泄漏
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,就会丢失指向原始对象的指针,因此无法释放它,并且存在泄漏。