NSString stringWithUTF8String中的内存泄漏

时间:2011-05-31 09:26:07

标签: iphone xcode memory-leaks

我正在调用数据库。在我打电话之后,我发现了NSString的漏洞。任何人都有解决方案将其删除?

 NSString *pic = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectStatement, 5)];

在上面的代码中,我发现90%的泄漏。我只是从数据库中读取数据。

2 个答案:

答案 0 :(得分:2)

您是否正在呼叫sqlite3_finalize()以释放内存?

如果你这样做,那么泄漏可能是NSString,但是我们需要知道你用它做了什么(它是自动释放的,所以你不需要release它,但您可以将其保留在代码中的其他位置。)

此外,将sqlite3_column_text直接传递到stringWithUTF8String是不安全的,因为如果它返回nil,您的应用程序将崩溃。

您也可以考虑使用fMDB,一个围绕sqlite3的ObjC包装器。找到它here

答案 1 :(得分:2)

请妥善解释问题,否则其他人无法确定您的确切问题。

我认为您要将 [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectStatement,5)]; 的值分配给您的类对象属性。

您可以在相应的类 dealloc 方法中释放指定的类字符串属性。也可以将其设置为nil。

示例:

如果你正在做

YourClass *classObj =[ YourClass  alloc] init];

classObj.myStringvariable = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectStatement, 5)];

类结构将

@interface YourClass {

    NSString *myStringvariable ;

}

@property (nonatomic,retain)  NSString *myStringvariable ;

.m文件

@synthesise myStringvariable ;


-(void)init{

 myStringvariable  = @"";

}

-(void)dealloc{

 [myStringvariable  release];
 myStringvariable  = nil;
}

检查它..此结构不会显示内存泄漏。