0

我正在開發的iOS應用程序,現在要測試它的內存泄漏問題,我已經使用了內存泄漏IOS /目標C

鐺靜態分析器

及其給我這個bug報告

-(void)pass 
{ 
printf("reading plist info"); 
// Path to the plist (in the application bundle) 
NSString *path = [[NSBundle mainBundle] pathForResource: 
        @"sortednames" ofType:@"plist"]; 

// Build the array from the plist 
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path]; 

for (id key in dict) { 
    NSLog(@"bundle: key=%@, value=%@", key, [dict objectForKey:key]); 
    string_values=[dict objectForKey:key]; 
    //NSLog(@"bundle data: key=%@, value=%@", key, [string_values objectAtIndex:0]); 
} 
//[dict release]; 
} 

,分析儀提供的信息是 whst i do now???

和一件事更多 是否足以用於我的應用程序的內存管理?
或我必須做更多的工作?
感謝答覆

+0

你爲什麼取消註釋'[字典釋放];'? – yinkou 2013-02-27 12:31:24

+0

當我取消註釋它>>該應用程序崩潰,無法繼續進行 – 2013-02-27 12:32:50

+0

使用'autorelease'。 'NSDictionary * dict = [[[[NSDictionary alloc] initWithContentsOfFile:path] autorelease];' – CainaSouza 2013-02-27 12:44:21

回答

2
string_values = [[dict objectForKey:key] **retain**]; 

你應該synthetise很強/保留屬性,並通過self.string_values分配你的伊娃。 然後您可以釋放您的字典,並且string_value仍然有效。

... 
@property(nonatomic, retain)NSString* string_value; 
... 
@synthetyse string_value; 
... 

然後

self.string_values = [dict objectForKey:key]; 

沒有,靜態分析是不是內存泄漏防彈。它可以在計算時間中發現算法泄漏,但在運行時不會發現泄漏。這就是爲什麼它被稱爲靜態分析儀。 但是這樣做真的很有幫助!

然後,您可以剖析您的應用程序並使用泄漏工具來檢查其他泄漏。

+0

然後在哪裏釋放string_values – 2013-02-27 13:47:25

+0

,因爲string_values是一個ivar或全局變量(我不知道你在哪裏聲明它到你的代碼中),當你不再需要它時釋放它,或者簡單地放到你的dealloc方法中。 – 2013-02-27 18:00:42

+0

感謝@Mr Bonjour – 2013-02-28 06:46:31

0

你可以直接使用NSDictionary的對象。無需分配。你可以像這樣使用。

NSString *path = [[NSBundle mainBundle] pathForResource: 
        @"sortednames" ofType:@"plist"]; 

dict = [NSDictionary dictionaryWithContentsOfFile: 
         path]; 

希望它能幫助你。

+1

autorelease或靜態分配不會改變問題。問題是將字符串分配到未來的垃圾值中。 (又名懸掛指針) – 2013-02-27 12:50:16

+0

這個建議不起作用嗎?>>錯誤的超額錯誤 – 2013-02-27 13:59:25