我有一个使用
呈现的视图控制器[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上的释放行。
答案 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
好吧,你错了!您只是声明要使用的对象类型,而不是分配它们
如果你将它们分配给某些地方,你需要释放它们......