Iphone 从另一个类获取的NSString导致崩溃

Iphone 从另一个类获取的NSString导致崩溃,iphone,memory-management,nsstring,Iphone,Memory Management,Nsstring,我的iPhone应用程序是基于标签的。在一个选项卡中,比如说安全选项卡我有三个视图控制器第一、第二、第三。我正在从Second视图控制器向Third视图控制器传递字符串值。selectedAlertDesc是第三个视图控制器的NSString对象 在第三个视图控制器中: @property (nonatomic,retain) NSString *selectedAlertDesc; @synthesize selectedAlertDesc = _selectedAlertDesc; Thi

我的iPhone应用程序是基于标签的。在一个选项卡中,比如说
安全选项卡
我有三个视图控制器
第一、第二、第三
。我正在从
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我应该实现吗??