我正在调用数据库。在我打电话之后,我发现了NSString的漏洞。任何人都有解决方案将其删除?
NSString *pic = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectStatement, 5)];
在上面的代码中,我发现90%的泄漏。我只是从数据库中读取数据。
答案 0 :(得分:2)
您是否正在呼叫sqlite3_finalize()
以释放内存?
如果你这样做,那么泄漏可能是NSString
,但是我们需要知道你用它做了什么(它是自动释放的,所以你不需要release
它,但您可以将其保留在代码中的其他位置。)
此外,将sqlite3_column_text
直接传递到stringWithUTF8String
是不安全的,因为如果它返回nil
,您的应用程序将崩溃。
答案 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;
}
检查它..此结构不会显示内存泄漏。