loadView: 函数在 iOS 的 UIView 中的作用

8
我不理解 loadView: 函数在 UIView 中的机制。
我创建了以下项目:
- 首先,我创建了一个基于 iPhone 的窗口项目。 - 然后,我创建了一个 UIView 子类。 - 接下来,我创建了一个没有 xib 的 UIViewController 子类。 - 最后,在我在第三步中创建的类的 loadView: 函数中,我将创建在第二步中创建的 UIView 对象指定为 UIViewController 对象(在第三步中)的视图变量。
如果我省略最后一步,并在 loadView: 函数中放置语句 NSLog(@"test LoadView");,则当项目运行时,语句 NSLog(@"test LoadView"); 会连续调用,导致运行结果溢出。
请给我解释一下!谢谢!
1个回答

16

loadView:只有在视图属性为nil时才会被调用。在编程创建视图时使用此方法。default:创建一个没有子视图的UIView对象。例如 -

- (void)loadView 
{ 
    UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame]; 
    [view setBackgroundColor:color]; 
    self.view = view; 
    [view release]; 
}
通过实现loadView:方法,您可以钩取默认的内存管理行为。如果内存不足,视图控制器可能会收到didReceiveMemoryWarning消息。默认实现会检查视图是否正在使用中。如果其视图不在视图层次结构中且视图控制器实现了loadView:方法,则会释放其视图。稍后当需要该视图时,将再次调用loadView:方法来创建视图。
不确定为什么要使用loadView:,但您可以在viewDidLoad:中执行同样多的操作。
参考 -
1. 为什么此 iPhone 程序没有调用 -loadView? 2. loadView 希望这可以帮助您。

谢谢您的帮助!我有一个问题:在视图控制器使用nib文件和IBOutlet变量来组织视图的情况下,如果它收到didReceiveMemoryWarning消息,是否有任何方法释放视图,然后在需要时重新加载。谢谢! - vietstone
当然可以,只要你已经将UI元素声明为“retain”。在这里查看更多信息- https://dev59.com/TnM_5IYBdhLWcg3wvF3J - Srikar Appalaraju
亲爱的Srikar,我不知道在释放后重新加载nib文件到IBOutlet变量的方法。当它被重新加载时,IBOutlet变量处于什么状态?感谢您的帮助! - vietstone
谢谢你的帮助!我没有足够的声望来投票。 - vietstone
@camdaochemgio 很好。很高兴我能帮助你解决问题。即使您无法点赞,您也可以通过勾选“对号标记”将其选择为“正确答案”,该标记将变为绿色。这有助于社区... - Srikar Appalaraju

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接