gpt4 book ai didi

iphone - 已将Objective-C消息发送到地址为0xaa722d0的已释放对象(僵尸)

转载 作者:行者123 更新时间:2023-12-01 19:24:09 27 4
gpt4 key购买 nike

更新:-[NSIndexPath行]:消息发送到已释放实例0x895fe70

当我在设备上运行我的应用程序并进行分析时,它说:

将一个Objective-C消息发送到地址为0xaa722d0的已释放对象(僵尸)。

它在以下位置显示错误:

- (void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

int newRow = [indexPath row];
int oldRow = (lastIndexPath != nil) ? [lastIndexPath row]: -1;

我对Objective C编程非常陌生,并且自两天以来一直在努力解决以下问题,最近我使用Xcode 3.2.6创建了一个应用程序,但两天后又升级到Xcode,现在在下面的代码中遇到内存释放问题。我研究了使用工具和启用僵尸的方法,了解了问题发生的位置,但无法解决,
我要求一些指导..下面是我的代码在Xcode 4.2中运行。
#pragma mark -
#pragma mark Table Data Source Methods
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section {
return [list count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CheckMarkCellIdentifier = @"CheckMarkCellIdentifier";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
CheckMarkCellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CheckMarkCellIdentifier] autorelease];
}
NSUInteger row = [indexPath row];
NSUInteger oldRow = [lastIndexPath row];
cell.textLabel.text = [list objectAtIndex:row];
cell.accessoryType = (row == oldRow && lastIndexPath != nil) ?
UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;

return cell;
}

#pragma mark -
#pragma mark Table Delegate Methods
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

int newRow = [indexPath row];
int oldRow = (lastIndexPath != nil) ? [lastIndexPath row]: -1;

//----Captures the value selected in the list and shown in parent view.
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
SchneiderBMSAppDelegate *appDelegate = (SchneiderBMSAppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.priorityValue = cell.textLabel.text;

NSLog(@"Product selected is: %@",appDelegate.priorityValue);

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

- (void)viewDidUnload {
self.list = nil;
self.lastIndexPath = nil;
[super viewDidUnload];
}
- (void)dealloc {
[list release];
[lastIndexPath release];
[super dealloc];
}

最佳答案

您似乎以为lastIndexPath发行时将变为nil。事实并非如此。您要么需要保留对象(最好是使用setter而不是直接设置实例变量),要么不存储对其的引用。

关于iphone - 已将Objective-C消息发送到地址为0xaa722d0的已释放对象(僵尸),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8783701/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com