成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

你給我解析清楚,都有了CALayer了,為什么還要UIView

移動開發
“你給我解析清楚,都有了CALayer了,為什么還要UIView!” 聽到這種問題,是不是愣住了。

[[147557]]

“你給我解析清楚,都有了CALayer了,為什么還要UIView!” 聽到這種問題,是不是愣住了。

[[147558]]

WTF!這都是什么亂起八糟的問題。UIView繼承自UIResponder,主要特點是可以響應觸摸事件。而CALayer實際的圖層內容管理。大家干的的事情不一樣,是兩個東西,大家的存在互不影響,理所當然。

但仔細想想,真的是步步高點讀機,So Easy嗎?在細細揣摩背后的用意的時候,就會發現OMG?。。?/p>

[[147559]]

UILayer

假如UIKit不是出自蘋果之手,而是來自于我們,可能會出現什么情況呢?是的,可能UIView就和CALayer合體了成一個叫“UILayer”的東西了。這個UILayer是一個全能的Layer,可以負責管理顯示內容,也能處理觸摸事件,吊吊的,對不對!

[[147560]]

好的!假設UILayer老早就這么膩害了,在iOS2就存在了,真機智,一開始就設計的這么膩害了。

現在,你的產品經理過來,還帶著微笑。在iOS3.2版本要加上手勢識別。這好辦,改一下UILayer的價加一個手勢識別就好了。

你的產品經理又過來了,還拍你肩膀了,多么信任你,是不是。既然在iOS4引入了Block語法,把之前的動畫增加一個Block的版本吧。你想了想,容易,改一改UILayer的源碼就好。

你的產品經理又過來了,誒喲,還帶了兩枚產品妹子過來了,把你圍住了,都是公司紅人啦,眾望所托,有點害羞哦。

[[147561]]

這次叫你在iOS6增加一個叫做AutoLayout的Big Feature哦。這真的是一個很大的功能,要改很多地方,給測試也帶來很多困難,現在UILayer這個類已經越來越大,功能強大得如同要你命3000了,發布不能延期,這又是這么重要的一個類,還要對得起那妹子對你含情脈脈的期待,得小心翼翼的改了。最終你還是搞定了,哈哈,年終的優秀員工就是你啦。

你的產品經理又過來了,喲喲,樓你脖子,給你講笑話,還要請你吃飯咧,哦,產品妹子還在后面老在夸你呢。是的,又一次來到歷史性時刻,iOS迎來了改頭換面的第七個大版本。iOS7變得小清新了,還有加入物理效果哦,甚至視差都有,產品經理是要顛覆產品設計理念,試圖再一次改變世界哦,甚是了不得呀。然后,你點開那巨長的UILayer類,看來是要從頭改到腳了,但是要改那么多東西,時間有限啊,改完測試的時間貌似也不夠啊,怎么辦,重構更是不可能了,一年一度的發布是不能延期的,不然公司怎么在全世界面前掛住面子??墒菚r間就是這么不等人,就算天天程序員鼓勵師鼓勵也救不了你,你控制不了的代碼了,在iOS7這個歷史關口,你的神話倒下了。

[[147562]]

分析

所以,在這份理所當然的SDK的背后,蘊藏著大牛門幾十年的設計智慧。當中應該能夠看到很多門道。這次就UIView和CALayer來分析,就可以得出一些東西。

  • 機制與策略分離
  • 更多的不可變
  • 各司其職
  • 漏的更少

機制與策略分離

Unix內核設計的一個主要思想是——提供(Mechanism)機制而不是策略(Policy)。編程問題都可以抽離出機制和策略部分。機制一旦實現,就會很少更改,但策略會經常得到優化。例如原子可以看做是機制,而各種原子的組成就是一種策略。CALayer也可以看做是一種機制,提供圖層繪制,你們可以翻開CALayer的頭文件看看,基本上是沒怎么變過的,而UIView可以看做是策略,變動很多。越是底層,越是機制,越是機制就越是穩定。機制與策略分離,可以使得需要修改的代碼更少,特別是底層代碼,這樣可以提高系統的穩定性。

更多的不可變

穩定給你的是什么感覺?堅固?不可形變?穩定其實就是不可變。一個系統不可變的東西越多,越是穩定。所以機制恰是滿足這個不可變的因素的。構建一個系統有一個指導思想就是盡量抽取不可變的東西和可變的東西分離。水是成不了萬丈高樓的,堅固的混凝土才可以。更少的修改,意味著更少的bug的幾率。

各司其職

即使能力再大也不能把說有事情都干了,萬一哪一天不行了呢,那就是突然什么都不能干了。所以僅僅是基于分散風險原則也不應該出現全能類。各司其職,相互合作,把可控粒度降到***,這樣也可以是系統更穩定,更易修改。

漏的更少

接口應該面向大眾的,按照八二原則,其實20%的接口就可以滿足80%的需求,剩下的80%應該隱藏在背后。因為漏的少總是安全的,不是嗎。剩下的80%專家接口可以隱藏與深層次。比如UIView遮蔽了大部分的CALayer接口,抽取構造出更易用的frame和動畫實現,這樣上手更容易。

END

責任編輯:倪明 來源: 空之境界投稿
相關推薦

2022-06-07 08:39:35

RPCHTTP

2020-11-25 09:36:17

HTTPRPC遠程

2019-08-05 14:23:43

DockerKubernetes容器

2024-07-11 10:41:07

HTTPSHTTP文本傳輸協議

2023-12-11 12:03:14

Python工具元組

2023-01-12 09:01:01

MongoDBMySQL

2019-11-20 10:39:35

iPhone緩存清理

2024-04-16 08:26:18

IP地址MAC地址

2021-12-20 10:30:33

forforEach前端

2022-09-13 08:44:02

IP網絡MAC地址

2020-09-16 06:51:37

Java線程JVM

2022-07-12 08:56:18

公平鎖非公平鎖Java

2017-02-07 09:37:46

2020-11-30 15:40:40

技術資訊

2017-04-17 11:50:13

51CTO 學院

2020-05-22 13:00:45

蘋果安卓手機

2020-06-10 09:06:48

MongoDB架構高可用

2017-01-18 09:42:11

Go

2023-06-26 08:20:02

openapi格式注解

2024-06-24 07:58:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧洲一级毛片 | 三级视频国产 | 久草色视频 | 精品日韩在线 | 97精品超碰一区二区三区 | 粉色午夜视频 | 看av网| 日本一区二区在线视频 | 国产色网站 | 欧美日韩高清 | 黄色a级一级片 | 精品国产一区二区国模嫣然 | www..com18午夜观看 | 国产成人一区二 | 综合网伊人 | 欧美日韩一区在线观看 | 国产精久久久久久久妇剪断 | 天天操天天射天天 | 黄网站色大毛片 | a级片在线 | 一区二区日韩精品 | 国产在视频一区二区三区吞精 | 综合久久av | 欧美黑人一区二区三区 | 中文字幕av色 | 久久久久久亚洲 | 久久久av | 97在线观看| 欧美一区二区三区在线看 | 精品一区欧美 | 精品欧美一区二区精品久久久 | 国产精品免费在线 | 一区二区三区欧美在线 | 日本高清中文字幕 | 蜜月va乱码一区二区三区 | 欧美日韩亚洲国产综合 | 日韩国产中文字幕 | 亚洲国产成人av | 在线毛片网 | 日韩成人免费中文字幕 | 狼色网 |