iOS的设计模式大体可以分为以下几种设计模式
1.创建型:单例设计模式、抽象工厂设计模式
2.结构型:MVC 模式、装饰器模式、适配器模式、外观模式、组合模式
3.行为型:责任链设计模式、观察者设计模式,备忘录设计模式、命令设计模式
MVC设计模式
最新仿写了一个iOS的项目 在些项目的过程中出现了很多问题 哎呀 不知道各位在些项目的时候都会遇到哪些问题 其实当你在完成一个个分散的小功能的时候 都还可以 可是当吧一对功能紧密的结合到一起来实现就会出现各种各样的问题 crush 下面就我写项目遇到的问题做一下简单的总结
-
model大家都不陌生 在写项目时要创建好多好多的model 多的让你烦 哈哈 对于创建model每个人都不一样 最开始我在创建model时 就是简单的把需要用到的数据写入model 在网络请求中将model撞到数组中 利用数组给相应的控件进行赋值 有时候还要用到字典的key来进行取值 这种方式写起来乱 不清楚 冗杂 后来呢 我先请求数据 观察整个vc中的数据结构是什么样子的 然后将这一大坨的数据 整体的写入model 首先你看最外层 一般是字典类型 你就可以先把最外层的这个数据看成是一个大的model 然后看第二层数据 也就是这个大model中元素都是什么类型的 可能是字典或者数组 如果在第二层数据中你要用到的是一个字典 那么再把这个字典写成第二个model
model例子:
#import "BaseModel.h"
@class SecLoginData;@interface SecLoginFirst : BaseModel @property (nonatomic, strong) SecLoginData *data; @end // ************************* #import "SecLoginFirst.h" #import "SecLoginData.h" @implementation SecLoginFirst - (void)setValue:(id)value forKey:(NSString *)key { [super setValue:value forKey:key]; if ([key isEqualToString:@"data"]) { SecLoginData *data = [SecLoginData modelWithDic:value]; _data = data; } } @end // ************************* #import "BaseModel.h" @class SecLoginItems; @interface SecLoginData : BaseModel @property (nonatomic, strong) SecLoginItems *items; @end // ***************** #import "SecLoginData.h" #import "SecLoginItems.h" @implementation SecLoginData - (void)setValue:(id)value forKey:(NSString *)key { [super setValue:value forKey:key]; if ([key isEqualToString:@"items"]) { SecLoginItems *item = [SecLoginItems modelWithDic:value]; _items = item; } } @end //******************** #import "BaseModel.h" @class SecLoginImage; @interface SecLoginItems : BaseModel @property (nonatomic, copy) NSString *nickname; @property (nonatomic, copy) NSString *profile; @property (nonatomic, copy) SecLoginImage *user_images; @end // ************* #import "SecLoginItems.h" #import "SecLoginImage.h" @implementation SecLoginItems - (void)setValue:(id)value forKey:(NSString *)key { [super setValue:value forKey:key]; if ([key isEqualToString:@"user_images"]) { SecLoginImage *image = [SecLoginImage modelWithDic:value]; _user_images = image; } } @end //************************ #import "BaseModel.h" @interface SecLoginImage : BaseModel @property (nonatomic, copy) NSString *orig; @property (nonatomic, copy) NSString *mid; @property (nonatomic, copy) NSString *tmb; @property (nonatomic, copy) NSString *self_img; @end //************************* #import "SecLoginImage.h" @implementation SecLoginImage @end
view 在MVC编程思想中 要最大程度的重用相同样式的view 重用度要达到最高 这样才能达到工程的简化
controller 与view model一样要最大限制的重用
单例设计模式
1.单例设计模式确保对于一个给定的类只有一个实例存在,这个实例有一个全局唯一的访问点。
[NSUserDefaults standardUserDefaults], [UIApplication sharedApplication], [UIScreen mainScreen], [NSFileManager defaultManager],所有的这些方法都返回一个单例对象
总结:
一定记住 model和view永远不能相互通信 要通过controller进行传递 所以链接view和model的是controller controller可以与view通话也可以与model进行通话
以上只是我个人对MVC以及单例设计模式进行简单的总结 希望可以给大家一些借鉴意义 仍有不足之处