0
當我滾動我的表視圖上下,約經6-8次我的應用程序崩潰,我得到在調試窗口中:爲什麼我的應用程序崩潰時出現以下錯誤?
myapp[250:207] *** -[NSIndexPath row]: message sent to deallocated instance 0xdd0eab0
這裏是我的代碼:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return [remoteRecipientItems count];
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"RemoteRecipientItem";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
NSUInteger row = [indexPath row];
NSUInteger oldRow = [lastIndexPath row];
// Configure the cell...
[[cell textLabel]setText:[remoteRecipientItems objectAtIndex:[indexPath row]]];
cell.accessoryType = (row == oldRow && lastIndexPath !=nil)? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
return cell;
}
#pragma mark -
#pragma mark Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
int newRow = [indexPath row];
int oldRow = (lastIndexPath !=nil)?[lastIndexPath row]:-1;
if (newRow != oldRow) {
UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];
newCell.accessoryType = UITableViewCellAccessoryCheckmark;
UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:lastIndexPath];
oldCell.accessoryType = UITableViewCellAccessoryNone;
lastIndexPath = indexPath;
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
#pragma mark -
#pragma mark Memory management
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Relinquish ownership any cached data, images, etc. that aren't in use.
}
- (void)viewDidUnload {
// Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
// For example: self.myOutlet = nil;
remoteRecipientItems = nil;
remoteRecipientID = nil;
xmlData = nil;
lastIndexPath = nil;
}
- (void)dealloc {
[remoteRecipientItems release];
[remoteRecipientID release];
[xmlData release];
[lastIndexPath release];
[super dealloc];
}
,這樣意味着我不得不釋放了嗎?我會在哪裏發佈它? – jini 2011-05-22 18:28:24
@jini在'dealloc'中。 – 2011-05-22 18:48:03
是不是在每個表格視圖中都保留點擊?在dealloc中,我只會釋放一次?這不會混淆保留/釋放計數嗎? – jini 2011-05-22 18:53:49