架构-MVP

MVP
面向协议编程

presenter 中间调度者(声明协议,来实现接口) view model之间的调度
view: 自定义view代替原有view
model: 交给preset调度,并赋值。
下面可扩展(项目大的时候)
context: 中间者,让VC持有,并且这个是context是view model vc三者间调度
adapter: view的一个适配器可以兼容 各种视图xr x等

自己写个view,并把VC在load里这个view处理适配。

当工程庞大的时候,present 和 view打交道多了就会很错乱。
这时在这之间建立一个中间者context,由他来提供view和present
而且这个context是vc的一个属性,这样随时随地都可以调用

那么这里会出现循环引用问题
self - context -present -self

所以这里把vc弱引用,其它部份弱引用会随时随地没有,是一个风险,那弱引用vc的话就是vc没有了。
self.rootContext = [[Context alloc] init]; //rootContext强引用strong,而这里是vc持有的,会随着vc释放而释放
self.contenxt = self.rootContext;//context弱引用assgin,这里就保持住了rootcontext

self -weak- context -present -self

一个weak指针指向一个长期存在的对象,这个长期存在的对象不释放那么weak指向的对象不会释放,也就是两对象生命 周期绑定了,此时weak打破了闭环。

不想每次写
view = 自己的view
就在基类的viewdidload里写入

self.context.view.frame = self.view.bould
self.context.view = self.view

视图配置好了接下来我们需
加载数据就交给present
view视图构建 -- 就交给delegate

可以定义一个宏
#define GT(instace,protocol,message)[(id<protocol>)(instance)message]
//加载数据
GT(self.context.presenter,KCHomePresenterDelegate,loadData:self.homeAdapter];

示例:

先在VC中buildView
GT(self.context.view,KCHomePresenterDelegate,buildHomeView:self.homeAdapter];

然后在homeView重写buildHomeView中,写入加载数据
GT(self.context.presenter,KCHomePresenterDelegate,loadData:adapter];

然后在homePrsenter重写loadData中,写入加载UI视图
GT(self.context.view,KCHomePresenterDelegate,reloadUIWithData);

问题一:presnt的代码增大了怎么办

当我们这样写下去的最多的代码量会集中在presnt里,所以我们要解决这个问题我们可以按业务的形式去划分变成一个分类(present+A)

问题二:子视图要传值到父视图上面有哪些方法

可以kvo\通知\block都可以,不过这些没有context直接,可以定义协议后直接让context通知某个协议实现某个方法就好了。最简单。但是会有一个问题子视图如何拿得到父视图的context呢。
通过响应裢方式去拿。可以定义一个NSObject+GT写入方法-(Context*)context{};
while{
view.superview
setContext(super.context)
}

问题三:数据格式的规范

比如APP中要传一些结构性的数据,但是每个人的想法不一样,取的结构和名字都不一样。但是做的事情又是一样的。这时候就要考虑写一个工具类或者宏把这些事情统一抽象出来。
比如通知,可以写一个工具类或宏,先把要求的数据传差进来,然后拼接成一个dict
info[@"data"] = data
info[@"table"] = tableName
info[@"event"]  = rowEvent
然后发回主线程 
dispatch_async(dispatch_get_main_queue(),^{
[NSNotificationCenter defaultCenter] postnotificationName:tablename object:nil userInfo:info];
});
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,036评论 1 32
  • 1.设计模式是什么? 你知道哪些设计模式,并简要叙述?设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型...
    龍飝阅读 2,057评论 0 12
  • 把网上的一些结合自己面试时遇到的面试题总结了一下,以后有新的还会再加进来。 1. OC 的理解与特性 OC 作为一...
    AlaricMurray阅读 2,472评论 0 20
  • 前言 MVP模式是MVC模式的一个演化版本(好像所有的模式都是出自于MVC~~),MVP全称Model-View-...
    WQ_UESTC阅读 7,434评论 4 21
  • 2016年2月共有224位跑友提交了月跑量数据,完成了20887.96公里的里程。男性跑友151位,完成跑...
    假壳鱼阅读 533评论 0 0