2011-12-07 113 views
0

大家好我得到的內存泄漏與下面的代碼。如何解決線路....內存泄漏與stringWithCString

const char *value = (const char *)sqlite3_column_text(statement, i); 
[result setObject:[NSString stringWithCString:value encoding:NSUTF8StringEncoding] forKey:columnName]; 

const char *value = (const char*)sqlite3_column_text(statement, i); 
NSString *str_Value = [[NSString alloc] initWithFormat:@"%@",[NSString stringWithUTF8String:value]] ; 
[result setObject:str_Value forKey:columnName]; 
[str_Value release]; 

如何刪除此泄漏。請幫助out ......

+2

至於第一個:你確定這是泄漏,怎麼樣? 至於第二:你當然需要[str_Value發佈];最後。 –

+0

第一個版本看起來很好。第二個版本也是正確的(編輯之後),儘管顯式的'initWithFormat:'是不必要的,因爲它所做的只是包裝由'stringWithUTF8String:'返回的字符串。那麼,樂器說什麼是泄漏? – DarkDust

+0

at [result setObject:str_Value forKey:columnName]; – Narayana

回答

0

你需要對它進行空檢查;

if (value != null) 
{ 
    NSString *str_Value = [[NSString alloc] initWithFormat:@"%@",[NSString 
    stringWithUTF8String:value]] ; 
    [result setObject:str_Value forKey:columnName]; 
} 
+1

雖然這當然是一個好主意,但你仍然會錯過泄漏的NSString。 – DarkDust

+0

@DarkDust如何解決內存泄漏問題 – Narayana