小论ios中的设计模式

无论是做什么产品,设计模式都是一个非常重要的环节。对不同模式的正确应用不仅仅能加快开发,更能使整个项目拥有清晰的架构,便于后续的发展和维护。

在阅读项目代码的过程中,我一直在问自己,为什么这个地方要这么设计,哪些方法要开放,哪些需要隐藏,哪些需要使用单例,为什么要在这里使用观察。一个优秀的程序员不能仅仅完成任务,应该去思考把代码写的优雅,把产品做的优秀,把自己当作一个设计师i,一个作家,而不是一个工人。

下面是我阅读代码时候对设计模式的一些想法和思考,不正确的地方请多多指教。

MVC。

MVC应该是最为耳熟的设计模式了。MVC指的就是模型,视图,控制器分离。最为理想的MVC设计应该是每一个类都应该有且只有归属到一个部分中。在项目阅读过程中,我发现到MVC的思想无处不在,但到了实际的实施过程中,也有许多很难照顾到的地方。比如IOS中的VC,他究竟应该算在V还是算在C中呢。如果完全将数据源设置抽离出来,开发成本肯定会会加大,对于是否利大于弊,在不同的环境下值得商榷。许多部分在我阅读的过程中,我尝试用MVC的考量去修改代码,但结果并不理想。也就是说,不能生搬硬套MVC思想,而是应该根据具体的情况采取具体的考量。

单例模式。

项目代码中,大量应用了单例模式。在开始的时候,对于单例我是很不明白的,因为之前做的自己的demo都很小,并没有实现到这个部分。在阅读了一些人写的文章关于单例的思考,我才逐渐明白在项目中单例的作用,下面是我看到的一个对于单例解释非常好的一篇文章的部分

单例模式(Singleton)

概念:整个应用或系统只能有该类的一个实例


在iOS开发我们经常碰到只需要某类一个实例的情况,最常见的莫过于对硬件参数的访问类,比如UIAccelerometer.这个类可以帮助我们获得硬件在各个方向轴上的加速度,但是我们仅仅需要它的一个实例就够了,再多,只会浪费内存。

例子。文件管理,侧边栏,弹出提示,网络请求管理,公有方法,缓存,默认设置等等

单例的五个小步

1. 声明一个可以新建和获取单个实例对象的方法

2. 声明一个static类型的类变量

3. 声明一个只执行一次的任务

4. 调用dispatch_once执行该任务指定的代码块,在该代码块中实例化上文声明的类变量


5. 返回在整个应用的生命周期中只会被实例化一次的变量

代码事例


//Singleton.h
@interface Singleton : NSObject
+ (Singleton *)sharedSingleton; <1>
@end

/***************************************************************/

//Singleton.m
#import "Singleton.h"
@implementation Singleton   
static Singleton *sharedSingleton = nil;<2>

+ (Singleton *)sharedSingleton{
    static dispatch_once_t once;<3>
    dispatch_once(&once,^{
        sharedSingleton = [[self alloc] init];<4>
        //dosometing
    });
    return sharedSingleton;<5>
}

使用单例的目的是有些对象作为整个应用都存在的可以公用的,比如文件管理器,网络管理器,通用的导航栏(侧边栏,下边栏等等)。使用单例可以避免过多的对象生成,节省内存开销。在ios7后一般使用GCD+ARC的形式。

单例对象在整个程序中只有唯一的入口,因此单例的对象都是静态的static,同时,一般我们使用懒加载,即在第一次使用的时候再调用dispatch_once生成。一旦类已经生成了实例,那么生成器再也不会被调用。

观察者模式(KVO)。

又是一个在项目中非常常用的模式,后面会有一篇专门的博客文章来记录自己的一些使用的心得。

键值编码(KVC)

可以简化代码。特别在Json传值中应用的非常多。在像TableView中的数据源设置中也有很多的应用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值