Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ipad 内存泄漏问题?_Ipad - Fatal编程技术网

Ipad 内存泄漏问题?

Ipad 内存泄漏问题?,ipad,Ipad,我如何从下面的代码片段中释放dataArray +(NSMutableArray *)getData: (NSString *)dbPath { NSMutableArray *_dataArray = [[NSMutableArray alloc] init]; if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) { NSString *sqlQuery = [NSStri

我如何从下面的代码片段中释放dataArray

+(NSMutableArray *)getData: (NSString *)dbPath
{

    NSMutableArray *_dataArray = [[NSMutableArray alloc] init];
    if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK)
    {
        NSString *sqlQuery = [NSString stringWithFormat:@"SELECT DISTINCT name FROM databaseTable"];
        sqlite3_stmt *selectstmt;
        if(sqlite3_prepare_v2(database, [sqlQuery UTF8String], -1, &selectstmt, NULL) == SQLITE_OK)
        {
            while (sqlite3_step(selectstmt) == SQLITE_ROW)
            {
                [_dataArray addObject:[NSString stringWithFormat:@"%d", sqlite3_column_int(selectstmt, 0)]];
            }
        }
        sqlite3_finalize(selectstmt);
    }
    sqlite3_close(database);
    return _dataArray;
}
上述方法给我带来了内存泄漏,并给我今后的应用工作带来了严重的问题

return [_dataArray autorelease];
如果要返回保留的对象,需要遵循命名约定来明确这一点。该方法应以“新建”、“创建”或“复制”开头。否则,应返回自动释放的对象


如果要返回保留的对象,需要遵循命名约定来明确这一点。该方法应以“新建”、“创建”或“复制”开头。否则,您应该返回一个自动释放的对象。

我没有看到您发布的代码中有任何明显的泄漏。函数返回一个已分配的NSMutableArray,因此调用方将负责稍后调用
release
。或者,您可以选择将其设置为
自动释放
对象

此外,您可能希望仅在sqlite3_open()成功时调用sqlite3_close()(即,将sqlite3_close()移动到第一个
if
语句中)。sqlite3_finalize()也有同样的想法

SQLite隐式地进行了一些一次性初始化,但您不必担心这一点。检查文档以了解:

int sqlite3_initialize(void);
int sqlite3_shutdown(void);

什么类型的对象被报告为泄漏?

我在您发布的代码中没有看到任何明显的泄漏。函数返回一个已分配的NSMutableArray,因此调用方将负责稍后调用
release
。或者,您可以选择将其设置为
自动释放
对象

此外,您可能希望仅在sqlite3_open()成功时调用sqlite3_close()(即,将sqlite3_close()移动到第一个
if
语句中)。sqlite3_finalize()也有同样的想法

SQLite隐式地进行了一些一次性初始化,但您不必担心这一点。检查文档以了解:

int sqlite3_initialize(void);
int sqlite3_shutdown(void);
什么类型的物体被报告为泄漏