问题描述
|
我正在打电话给数据库。打电话后,我发现Nsstring中有泄漏。有人有解决办法将其删除吗?
Nsstring *pic = [Nsstring stringWithUTF8String:(char *)sqlite3_column_text(selectStatement,5)];
在上面的代码中,我发现90%的泄漏。我只是从数据库中读取数据。
解决方法
请很好地说明问题,否则其他人将无法确定您的确切问题。
我认为您正在分配[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;
}
检查它。此结构将不会显示内存泄漏。
, 您要拨4来释放内存吗?
如果您正在执行此操作,则可能是ѭ5泄漏,但是我们需要知道您对它的处理方式(它是自动发布的,因此您不需要ѭ6泄漏,但是您可以将其保留在其他位置在您的代码中)。
此外,将sqlite3_column_text
直接传递到stringWithUTF8String
是不安全的,因为如果返回nil
,您的应用程序将崩溃。
您可能还考虑使用fMDB,一个围绕sqlite3的ObjC包装器。在这里找到它。