2011-05-31 57 views
2

我正在調用數據庫。在我打電話後,我發現NSString中有泄漏。任何人都有解決方案來刪除它?NSString中的內存泄漏stringWithUTF8String

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

在上面的代碼中,我發現了90%的泄漏。我剛剛從數據庫中讀取數據。

+0

您是否運行過分析儀? – 2013-08-01 21:38:49

回答

2

請說明問題,其他人不能識別您的確切問題。我想你是你指定的值[NSString stringWithUTF8String :(char *)sqlite3_column_text(selectStatement,5)];添加到您的類對象屬性。

您可以在相應的類dealloc方法中釋放分配的類字符串屬性。也可以將其設置爲零。

例子:

如果你正在做

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; 
} 

檢查它..此結構不會顯示內存泄漏。

+0

我做了同樣的事情,發現沒有泄漏,但謝謝回答 – 2012-03-31 11:52:27

+0

@Umair_uas:謝謝 – 2012-03-31 19:08:07

2

你打電話給sqlite3_finalize()來釋放內存嗎?

如果你這樣做,那麼泄漏可能與NSString,但我們需要知道你對它做了什麼(它是autoreleased,所以你不需要release它,但你可以保留它在你的代碼中的其他地方)。

此外,它是不是安全直接傳遞到sqlite3_column_textstringWithUTF8String,因爲如果它返回nil,你的應用程序會崩潰。

你也可以考慮使用fMDB,一個圍繞sqlite3的ObjC包裝器。找到它here