我目前正在学习Objective-C,来自Java背景,我可以毫不费力地制作GUI应用程序.因此,我正在考虑其中一些问题的方式可能有点过时.这是问题(请原谅漫步) -
UIViewController的目的是什么?
让我举一个具体的例子.假设您正在创建一个使用一组GUI小部件的单视图应用程序.您可以手动将它们放在代码中,也可以使用InterfaceBuilder.在Java和HTML等其他语言中,我总是手工编写代码并且不使用GUI工具,因为我发现它们不允许我进行我所需的自定义.话虽如此,我听说InterfaceBuilder是甜蜜的(专家是手工做的吗?).所以假设我在XIB文件中放置了一堆小部件,然后想在代码中加载这个UIView.
在我看来(我错了吗?)我需要使用UIViewController才能正确地对UIView进行去除,但是对于我的应用程序来说,我对控制器本身没有用处(让我们把MVC留在这里一分钟).那么我是否必须为这个简单的单视图应用程序创建UIViewController?
让我们将它扩展到两个UIView应用案例.在这种情况下,我有一个有两个视图的应用程序,其中一个是完全自定义的,没有小部件(drawRect在这里,我来),另一个视图是widget-tastic(设置等).我希望能够交换视图,其中一个是我在IB中创建的,另一个是纯代码.我正在创建自定义绘制的UIView,如下所示:
eyesView = [[EyesView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];")
在小部件视图的情况下,我正在使用:
settingsView = (SettingsView *)[[[UIViewController alloc] initWithNibName:@"SettingsView" bundle:nil] view];
但我似乎无法找到一种方法来唤醒XIB而不使用我没用的虚拟UIViewController. 这让我回到原来的问题 - UIViewController的目的是什么?它是否仅仅是苹果公司为了让开发人员轻松启动和运行导航窗格及其类似产品(我无法想象)而包含的精美内容?
有没有更好的方法来做这一切?
UIViewController是事实上的Controller类,是业务逻辑应该驻留的地方(在这里或在其他Controller风格的类中).如果您不熟悉模型 - 视图 - 控制器设计模式,您应该阅读它.
无论如何,是的,如果你从一个笔尖反序列化东西,你需要一个充当文件所有者的对象,除了MainMenu.xib之外,这个对象几乎肯定应该是UIViewController的子类.我想不出你想要遗漏UIViewController的任何理由.
从技术上讲,可以使用较低级别的nib-loading架构手动加载nib,但是你仍然需要一些对象来充当File的所有者,除非你确切地知道你是什么,否则没有充分的理由这样做这样做.特别是因为UIViewController为你提供了很多免费赠品,比如它为你管理笔尖中所有根对象的内存,并且如果它没有被使用它可以在内存压力下卸载它的视图(然后在它被重新加载时)再次访问).