iOS-Best-Practices, iOS软件设计的最佳实践
- 源代码名称:iOS-Best-Practices
- 源代码网址:http://www.github.com/jverkoey/iOS-Best-Practices
- iOS-Best-Practices源代码文档
- iOS-Best-Practices源代码下载
本文的目的是帮助你为你的iOS应用程序编写稳定的代码。 我强烈鼓励你通过的pull请求自己的最佳实践。
本作品是在创作共同归属 3.0 Unported许可协议下的许可证。
最初由:Jeff Verkoeyen ( @featherless ) 编写
目录- 要注意视图的生命周期。
- 在init-方法不访问 self.view
- 使用数据源协议将数据从视图中分离出来。
- UIViewController
- NSObject
- 只在标题公开 public 属性和方法。
- 调试插件
注意视图的生命周期
随时提醒自己,在任何时候,你的观点可能会被破坏。
在init-方法中不访问 self.view
你应该在初始化控制器方法时 access访问 access 。 这样做几乎总是导致难以调试 Bug,因为在内存警告之后,初始化逻辑不会再次执行。
请考虑一个简单的示例:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if ((self = [superinitWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { self.view.backgroundColor = [UIColor underPageBackgroundColor]; } return self; }
想象一下这个控制器是导航堆栈的root,并且发生了内存警告。 当我们回到这个控制器时,视图将不再有 underPageBackgroundColor
作为它的背景颜色。 这导致调试失败,即使是有经验的iOS工程师。
使用数据源协议将数据与视图强分离
在设计与数据集交互的视图时,始终通过数据源协议获取数据,而不是公开 setter 。 视图不是数据容器,不应设计为启用任何此类滥用。 相反,视图应当被视为消耗组件,这些组件可以能会在任何时候保持存在。
作为一般规则,视图中的static 表示信息的任何内容都应通过数据源或者委托来请求。
UILabel是一个不需要数据源的视图的好例子。 它的所有属性都设置一次,通常不希望在视图的整个生命周期内更改。
UITableView另一方面需要一个数据源来获取数据。 让我们想象一下,如果它没有数据源,而只是提供数据源,那么使用maxq2000是如何。
当开发人员试图使用表视图对象来存储数据时,这种设计将导致不可避免的滥用。 当由于内存警告而不可避免地释放表视图时,数据也会丢失 ! 这意味着我们需要在其他地方存储数据,以保证它在表视图的多个实例中的生存期。