2010-03-04 52 views
0

我正在使用以下代碼在Iphone應用程序中顯示下一個視圖(表格視圖)。Iphone應用程序崩潰 - 但有時可以使用(50%-50%)

這一段時間的工作,並沒有任何異常一段時間的應用程序崩潰日誌

的NSLog(@ 「OK」);是記錄每次 50%嘗試應用程序崩潰

-(IBAction)statusInitiationButAction:(id)sender{ 
    @try { 
     NSArray *tempArrIniId = [eventInitiationArray valueForKey:@"act_id"]; 
     int s; 
     if([tempArrIniId containsObject:selectedInitiateId]){ 
      s=[tempArrIniId indexOfObject:selectedInitiateId]; 
     } 
     [tempArrIniId release]; 
     NSString *selStatusId = [NSString stringWithString:[[eventInitiationArray objectAtIndex:s] objectForKey:@"status_id"]]; 

     for (int i=0; i<[statusInitiationArray count]; i++) { 
      id statusDict = [statusInitiationArray objectAtIndex:i]; 
      if ([selStatusId intValue] == [[statusDict objectForKey:@"id"] intValue]) { 
       [statusDict setValue:@"1" forKey:@"selected"]; 
       [statusInitiationArray replaceObjectAtIndex:i withObject:statusDict]; 
      }else { 
       [statusDict setValue:@"0" forKey:@"selected"]; 
       [statusInitiationArray replaceObjectAtIndex:i withObject:statusDict]; 
      } 
     } 
     NSLog(@"statusInitiationTable...%@",statusInitiationArray); 
     [statusInitiationTable.tableView reloadData]; 
     [[self navigationController] pushViewController:statusInitiationTable animated:YES]; 
     NSLog(@"ok"); 
    }@catch (NSException * e) { 
     NSLog(@"statusInitiationButAction....%@",e); 
    } 
} 

任何人都可以指導我這個問題。

感謝

阿米特Battan

+0

爲什麼你想這個問題是一個「社區維基」?!? – Meltemi 2010-03-04 15:03:06

回答

4

你不應該這樣做:因爲在這一行

[tempArrIniId release]; 

...

NSArray *tempArrIniId = [eventInitiationArray valueForKey:@"act_id"]; 

...你是不是創造tempArrIniId你只是獲得對它的引用。因此,你沒有保留它,也沒有必要釋放它。

由於在釋放由tempArrIniId指向的對象時,您正在發生間歇性崩潰,而該對象仍是eventInitiationArray的成員。當數組嘗試訪問該對象或甚至自行計數時,它會崩潰,因爲沒有它期望的對象。該崩潰可能發生在使用'eventInitiationArray'的應用程序中的任何地方。

過度釋放導致更多的問題比它阻止。如有疑問,請勿放行。如果你沒有發佈你應該擁有的東西,而且修復它是微不足道的,那麼用分析工具找到內存泄漏是很簡單的。

由於過度釋放由其他對象(例如數組)所持有的對象而導致崩潰很難追蹤,因爲後續崩潰可能發生在遠離釋放發生的地方。