iOS-Best-Practices, iOS软件设计的最佳实践

iOS-Best-Practices, iOS软件设计的最佳实践


软件设计最佳实践

本文的目的是帮助你为你的iOS应用程序编写稳定的代码。 我强烈鼓励你通过的pull请求自己的最佳实践。


本作品是在创作共同归属 3.0 Unported许可协议下的许可证。

最初由:Jeff Verkoeyen ( @featherless ) 编写

目录

注意视图的生命周期

随时提醒自己,在任何时候,你的观点可能会被破坏。

在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是如何。

当开发人员试图使用表视图对象来存储数据时,这种设计将导致不可避免的滥用。 当由于内存警告而不可避免地释放表视图时,数据也会丢失 ! 这意味着我们需要在其他地方存储数据,以保证它在表视图的多个实例中的生存期。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值