Ipad 内存泄漏问题?
我如何从下面的代码片段中释放dataArrayIpad 内存泄漏问题?,ipad,Ipad,我如何从下面的代码片段中释放dataArray +(NSMutableArray *)getData: (NSString *)dbPath { NSMutableArray *_dataArray = [[NSMutableArray alloc] init]; if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) { NSString *sqlQuery = [NSStri
+(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);
什么类型的物体被报告为泄漏