如何解决引用其他视图控制器是否正常?
| 是否值得存储当前ViewController打开的对其他ViewController的引用?如果我有一个viewcontroller显示一个带有打开popoverviewcontroller的按钮的屏幕,那么我是否应该保留对该引用的引用,然后再检查该变量是否为nil,仅使popoverviewcontroller一次呢?还是没有必要?在某些情况下,这会导致很多额外的变量,以及额外的代码,但是如果有人可以说这是否必要,那就太好了。if (self.popoverVC == nil) {
UIPopoverController *popVC = [[UIPopoverController alloc] initWithContentViewController:self.configureTest];
popVC.popoverContentSize = CGSizeMake(320.0,460.0);
popVC.delegate = self;
self.popoverVC = popVC;
[popVC release];
}
解决方法
对我来说,存储对其他控制器的引用很好,只要我觉得合理,我就会这样做。将委托模式视为对控制器之间的交互进行建模的一种方式。
不过,还有其他选择。
在您的特定情况下,您可以设置一个按钮被按下的标志(但是我不知道这对您的特定工作流程是否有意义),而不是存储对控制器的引用。
在您的情况下不适用,但通常可能有用的是访问ѭ1的\“ parent \”层次结构。 UIKit没有明确维护它,因此您可以设置“ 2”属性,也可以从一个控制器转到其父级,导航“ 3”层次结构。在我看来,这不适用于您的情况,因为通信将由子控制器启动(在您的情况下,您对相反的情况感兴趣)。无论如何,如果您有兴趣,可以用Google搜索。
您拥有的另一种选择是使用通知:一个控制器可以注册通知,另一个可以观察。
[[NSNotificationCenter defaultCenter] postNotificationName:@\"notifName\" object:self];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reactToNotif:) name:@\"notifName\" object:nil];
这比函数调用贵一点,但是它不需要ivar,也不需要控制器之间的耦合。
, 这是完全明智的,特别是如果您希望popVC在两次出现之间保持其状态。
当收到内存警告时,释放不活动的vc \是明智的。
, 保留对UIPopoverController的引用(虽然它不是UIViewController的子类,而是NSObject的子类)的原因与保留对UIViewController的引用稍有不同。
当您提供UIPopoverController时,不会自动保留它。因此,您必须自己保留它。
与UIViewController相比,当您展示(或推送)它们时会自动保留它们。
有一些技巧可以保留控制器而不保留引用,并在委托方法中将其释放,从而通知您弹出窗口已被关闭。
对我来说,这些花招总是让人觉得有些脏。例如,您没有选择手动关闭弹出窗口的选项。
由于ARC在LLVM页面上公开记录,因此我可以告诉您,如果使用ARC,这些技巧将停止起作用。您必须保留一个引用,否则编译器将在离开呈现弹出窗口的方法之后立即释放它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。