我有下一个代码,非常简单:
//SecondViewController.m
if(contentRvController==nil){
contentRvController = [[ContentView alloc]
initWithNibName:@"ContentView" bundle:nil]; //ContentView is a custom UIViewController
....
[self.view addSubview:contentRvController.view];
}
else{
contentRvController.view.hide = YES;
[contentRvController release];
contentRvController = nil;
}
基本上,当从按钮启动代码时,如果 UIViewController 不存在,则创建一个并显示它(它旨在显示在更大的主桌面视图上,这是 SecondViewController 视图)。如果它已打开,请将其关闭并删除以释放资源。
现在,contentRvController 是 ContentView 的一个实例,一个自定义的 UIViewController。它有自己的关闭 UIButton,其中 IBAction 是这样的:
//ContentView.m
- (IBAction) closeView {
self.view.hidden = YES;
[self release];
self = nil;
}
现在,当从 SecondViewController 触发时,释放 contentRvController 可以正常工作(或者在我看来),视图出现并消失。但是,当点击 ContentView 关闭按钮时,它也会关闭视图,但是当尝试再次打开它时if(contentRvController==nil)
回报FALSE
,所以我必须点击两次按钮才能执行才能再次显示 ContentView。
在我看来,这self = nil;
工作方式不同于contentRvController = nil;
尽管它应该指向同一个地方,但我对此迷失了。
任何想法?来自墨西哥的欢呼
它们的工作方式相同,但它们所做的事情与您认为的不同。这=
不影响物体;它影响指向该对象的变量。将一个变量设置为指向 nil 不会更改程序中任何其他变量的值。相似地:
int a = 5;
int b = a;
b = 6;
printf("A is %d and B is %d\n", a, b);
这将打印“A is 5 and B is 6”——因为将 B 设置为新值不会更改 A 的值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)