iPhone - 自我解雇一个viewController

时间:2011-02-04 17:23:43

标签: iphone

我有一个使用

呈现的视图控制器
[self presentModalViewController:myVC animated:YES];

这个VC有几个声明的保留属性(@property),我必须在它的dealloc上发布。

变量声明为

@property (nonatomic,retain) myClass1 *myProperty;
@property (nonatomic,retain) myClass2 *myProperty2;
// etc... and then synthesized on .m

问题是当我使用

关闭viewController时
[self dismissModalViewControllerAnimated:YES];  

当释放我声明的保留属性时,它会在dealloc上崩溃,错误* 修改正在最终确定的层*

显然,viewController在其自己的dealloc运行时消失,然后崩溃。

我该如何解决?提前谢谢。

修改

显示viewController的代码在rootViewController上,并且是:

UIViewController *myVC = [[UIViewController alloc] init];
myVC.delegate = self;

UINavigationController *navigator = [[UINavigationController alloc] initWithRootViewController:myVC];

[self presentModalViewController:navigator animated:YES];
[navigator release];
[myVC release];

这就是myVC上的dealloc代码包含的内容

- (void) dealloc {
  [myProperty1 release]; // see this properties at the beginning of this question
  [myProperty1 release]; // if I comment these 2 relesases it stops crashing
  [super dealloc];
}
myVC从内部被解雇,但根据文档,这很好。我也尝试从rootviewController中解除它但它继续崩溃。停止崩溃的唯一方法是禁用dealloc上的释放行。

2 个答案:

答案 0 :(得分:1)

如何设置属性?

self.myProperty = 

?我的猜测是你不保留它们。你在做什么

myProperty = ...
任何机会都没有保留或自我。您合成的setter需要有机会实际保留新创建的对象...

所以完整它应该读到这样的东西:

MyClass1 *aProperty = [[MyClass1 alloc] init];
self.myProperty1 = aProperty;
[aProperty release];

答案 1 :(得分:0)

...我问你在哪里分配并初始化“myProperty1”和“myProperty2”......

我担心你会这么想:

@property (nonatomic,retain) myClass1 *myProperty;
@property (nonatomic,retain) myClass2 *myProperty2;

需要您释放myProperty和myProperty2

好吧,你错了!

您只是声明要使用的对象类型,而不是分配它们

如果你将它们分配给某些地方,你需要释放它们......