你给我解析清楚,都有了CALayer了,为什么还要UIView

原文地址
“你给我解析清楚,都有了CALayer了,为什么还要UIView!” 听到这种问题,是不是愣住了。

image

WTF!这都是什么乱起八糟的问题。UIView继承自UIResponder,主要特点是可以响应触摸事件。而CALayer实际的图层内容管理。大家干的的事情不一样,是两个东西,大家的存在互不影响,理所当然。
但仔细想想,真的是步步高点读机,So Easy吗?在细细揣摩背后的用意的时候,就会发现OMG!!!
image

UILayer
假如UIKit不是出自苹果之手,而是来自于我们,可能会出现什么情况呢?是的,可能UIView就和CALayer合体了成一个叫“UILayer”的东西了。这个UILayer是一个全能的Layer,可以负责管理显示内容,也能处理触摸事件,吊吊的,对不对!
image

好的!假设UILayer老早就这么腻害了,在iOS2就存在了,真机智,一开始就设计的这么腻害了。
现在,你的产品经理过来,还带着微笑。在iOS3.2版本要加上手势识别。这好办,改一下UILayer的价加一个手势识别就好了。
你的产品经理又过来了,还拍你肩膀了,多么信任你,是不是。既然在iOS4引入了Block语法,把之前的动画增加一个Block的版本吧。你想了想,容易,改一改UILayer的源码就好。
你的产品经理又过来了,诶哟,还带了两枚产品妹子过来了,把你围住了,都是公司红人啦,众望所托,有点害羞哦。
image

这次叫你在iOS6增加一个叫做AutoLayout的Big Feature哦。这真的是一个很大的功能,要改很多地方,给测试也带来很多困难,现在UILayer这个类已经越来越大,功能强大得如同要你命3000了,发布不能延期,这又是这么重要的一个类,还要对得起那妹子对你含情脉脉的期待,得小心翼翼的改了。最终你还是搞定了,哈哈,年终的优秀员工就是你啦。
你的产品经理又过来了,哟哟,楼你脖子,给你讲笑话,还要请你吃饭咧,哦,产品妹子还在后面老在夸你呢。是的,又一次来到历史性时刻,iOS迎来了改头换面的第七个大版本。iOS7变得小清新了,还有加入物理效果哦,甚至视差都有,产品经理是要颠覆产品设计理念,试图再一次改变世界哦,甚是了不得呀。然后,你点开那巨长的UILayer类,看来是要从头改到脚了,但是要改那么多东西,时间有限啊,改完测试的时间貌似也不够啊,怎么办,重构更是不可能了,一年一度的发布是不能延期的,不然公司怎么在全世界面前挂住面子。可是时间就是这么不等人,就算天天程序员鼓励师鼓励也救不了你,你控制不了的代码了,在iOS7这个历史关口,你的神话倒下了。
image

分析
所以,在这份理所当然的SDK的背后,蕴藏着大牛门几十年的设计智慧。当中应该能够看到很多门道。这次就UIView和CALayer来分析,就可以得出一些东西。
机制与策略分离
更多的不可变
各司其职
漏的更少

机制与策略分离
Unix内核设计的一个主要思想是——提供(Mechanism)机制而不是策略(Policy)。编程问题都可以抽离出机制和策略部分。机制一旦实现,就会很少更改,但策略会经常得到优化。例如原子可以看做是机制,而各种原子的组成就是一种策略。CALayer也可以看做是一种机制,提供图层绘制,你们可以翻开CALayer的头文件看看,基本上是没怎么变过的,而UIView可以看做是策略,变动很多。越是底层,越是机制,越是机制就越是稳定。机制与策略分离,可以使得需要修改的代码更少,特别是底层代码,这样可以提高系统的稳定性。
更多的不可变
稳定给你的是什么感觉?坚固?不可形变?稳定其实就是不可变。一个系统不可变的东西越多,越是稳定。所以机制恰是满足这个不可变的因素的。构建一个系统有一个指导思想就是尽量抽取不可变的东西和可变的东西分离。水是成不了万丈高楼的,坚固的混凝土才可以。更少的修改,意味着更少的bug的几率。
各司其职
即使能力再大也不能把说有事情都干了,万一哪一天不行了呢,那就是突然什么都不能干了。所以仅仅是基于分散风险原则也不应该出现全能类。各司其职,相互合作,把可控粒度降到最低,这样也可以是系统更稳定,更易修改。
漏的更少
接口应该面向大众的,按照八二原则,其实20%的接口就可以满足80%的需求,剩下的80%应该隐藏在背后。因为漏的少总是安全的,不是吗。剩下的80%专家接口可以隐藏与深层次。比如UIView遮蔽了大部分的CALayer接口,抽取构造出更易用的frame和动画实现,这样上手更容易。
END

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,019评论 4 62
  • 周四,我意外地接到了艳艳的电话,“小行,周末有空吗?我要离开深圳了,一起吃个饭吧。” 此时离我们上次见面已经有一年...
    向行阅读 810评论 6 8
  • 踏春寻酒家,做客南山凹。 暮归闻笛声,婉转下梨花。
    米速阅读 196评论 0 2
  • 秋雨如酒润孤山 仙袂袅袅赛婵娟 浮生大梦醉一场 凡尘飘落桂花仙 图片拍自西湖的船上,小雨,散落一地的桂花瓣,混合雨...
    王二狗的青春阅读 175评论 0 1
  • Fun凤阅读 120评论 0 0