ios - 在 Xib 文件中实例化 View Controller 如何导致难以理解和调试的代码?

标签 ios

在介绍iOS Programming: the Big Nerd Ranch Guide ,作者说他们总是以编程方式创建 View Controller ,并且在 Xib 文件中实例化 View Controller 会导致难以理解和调试的项目。

具体来说,是什么导致了这个问题?你会遇到哪些困难?

有没有具体的例子,在代码中创建 View Controller 如何避免这些问题?

最佳答案

引言在介绍 > 风格:

We will always create view controllers programmatically. Some programmers will instantiate view controllers inside XIB file. We've found this practice leads to projects that are difficult to comprehend and debug.

他们谈论实例化。如果你有两个 View Controller A、B,你可以在 A 的实现中分配/初始化 B,或者你可以在 A 的 XIB 中删除对 B 的引用。在这两种情况下,B 都可以在 XIB 中定义,也可以不在 XIB 中定义(顺便说一句,Big Ranch 的书建议将 XIB 用于复杂的 View Controller )。


无论如何,区别在于:

CitySelectionVC *citySel = [[[CitySelectionVC alloc] initWithCities:self.cities] autorelease];
[self.navigationController pushViewController:citySel animated:TRUE];

对比

citySel.cities = self.cities;
[self.navigationController pushViewController:citySel animated:TRUE];

第一种情况是代码中的显式实例化。它告诉我:

  • 现在创建了 VC。
  • 它需要城市运作。

第二个 block 中的代码引用了 XIB 中实例化的 socket 。它告诉我:

  • VC 在未知时间以未知要求实例化。
  • 我正在经过城市。

我喜欢第一种风格,因为它更明确,并且让我可以控制对象的生命周期。

在 iOS 5 中,您可以使用 Storyboard来创建过渡并在 Controller 之间传递信息。请参阅 WWDC2011 的第 309 节。

关于ios - 在 Xib 文件中实例化 View Controller 如何导致难以理解和调试的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7497283/

相关文章:

ios - 内部带有 UITableView 的 self 调整 UITableViewCell - self 调整不起作用

ios - UIActionSheet 未在 iOS 8 中显示

iphone - UIView 如何访问 UIViewController 的属性?

ios - 为什么升级到 ios-sdk8 后我的 UIImageView 不会拉伸(stretch)?

ios - Xcode 开发 : save api response for future tests during development

android - 可以在应用程序中查看 jQuery/Javascript 吗?

ios - iOS 8.0 以下版本需要更换 registerUserNotificationSettings

ios - 将 GMSMarker 添加到 map 时,应用程序仅在 iPhone 5 上崩溃 : EXC_BAD_ACCESS

ios - 如何使用 SplitView 提示在 MvvmCross 中显示 View 的位置

ios - 在矩形中绘制没有被调用