Iphone 从另一个类获取的NSString导致崩溃
我的iPhone应用程序是基于标签的。在一个选项卡中,比如说Iphone 从另一个类获取的NSString导致崩溃,iphone,memory-management,nsstring,Iphone,Memory Management,Nsstring,我的iPhone应用程序是基于标签的。在一个选项卡中,比如说安全选项卡我有三个视图控制器第一、第二、第三。我正在从Second视图控制器向Third视图控制器传递字符串值。selectedAlertDesc是第三个视图控制器的NSString对象 在第三个视图控制器中: @property (nonatomic,retain) NSString *selectedAlertDesc; @synthesize selectedAlertDesc = _selectedAlertDesc; Thi
安全选项卡
我有三个视图控制器第一、第二、第三
。我正在从Second
视图控制器向Third
视图控制器传递字符串值。selectedAlertDesc是第三个视图控制器的NSString对象
在第三个视图控制器中:
@property (nonatomic,retain) NSString *selectedAlertDesc;
@synthesize selectedAlertDesc = _selectedAlertDesc;
Third *controller = [[Third alloc] init];
[controller setSelectedAlertDesc:[[alertArray objectAtIndex:indexPath.row] objectForKey:@"alertDesc"]];
[self.navigationController pushViewController:controller animated:YES];
[controller release];
在第二个视图控制器中:
@property (nonatomic,retain) NSString *selectedAlertDesc;
@synthesize selectedAlertDesc = _selectedAlertDesc;
Third *controller = [[Third alloc] init];
[controller setSelectedAlertDesc:[[alertArray objectAtIndex:indexPath.row] objectForKey:@"alertDesc"]];
[self.navigationController pushViewController:controller animated:YES];
[controller release];
它很好用,直到我换了标签。如果我离开第三个查看控制器页面中的安全选项卡,并在访问其他选项卡后返回,它将崩溃。它说,selectedAlertDesc变成了僵尸
我如何解决这个问题?我认为我们不应该初始化合成对象。我忘了什么吗
编辑:
根据建议,我使用工具检查分配/保留历史记录。我得到了以下信息:-因此在使用了selectedAlertDesc
之后,我保留了它。这是正确的方法吗??而且它工作正常
\u selectedAlertDesc=[\u selectedAlertDesc stringByReplacingOccurrencesOfString:@“opentag”with string:@”“;
[txtxTvw setText:_selectedAlertDesc];
来自评论:
结果表明,错误是由直接将新值分配给实例变量的代码引起的,而不是使用相关属性(或其对应的点符号)的set…
方法。这将绕过属性属性,并导致自动释放字符串的赋值
(主要线索是Instruments retain history中缺少的条目。)有两种可能性:使属性复制
,而不是保留
;使用Instruments及其Zombies模板查看对象的保留历史您是否在“Third”remove[controller release]的实现中实现了构造函数-(id)init@鲁佩什:这与它无关。。不管怎么说,我试过了,还是犯了同样的错误。@AppleDelegate我应该实现吗??