自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

[[147557]]

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

[[147558]]

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

但仔細(xì)想想,真的是步步高點(diǎn)讀機(jī),So Easy嗎?在細(xì)細(xì)揣摩背后的用意的時(shí)候,就會發(fā)現(xiàn)OMG?。?!

[[147559]]

UILayer

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

[[147560]]

好的!假設(shè)UILayer老早就這么膩害了,在iOS2就存在了,真機(jī)智,一開始就設(shè)計(jì)的這么膩害了。

現(xiàn)在,你的產(chǎn)品經(jīng)理過來,還帶著微笑。在iOS3.2版本要加上手勢識別。這好辦,改一下UILayer的價(jià)加一個(gè)手勢識別就好了。

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

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

[[147561]]

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

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

[[147562]]

分析

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

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

機(jī)制與策略分離

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

更多的不可變

穩(wěn)定給你的是什么感覺?堅(jiān)固?不可形變?穩(wěn)定其實(shí)就是不可變。一個(gè)系統(tǒng)不可變的東西越多,越是穩(wěn)定。所以機(jī)制恰是滿足這個(gè)不可變的因素的。構(gòu)建一個(gè)系統(tǒng)有一個(gè)指導(dǎo)思想就是盡量抽取不可變的東西和可變的東西分離。水是成不了萬丈高樓的,堅(jiān)固的混凝土才可以。更少的修改,意味著更少的bug的幾率。

各司其職

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

漏的更少

接口應(yīng)該面向大眾的,按照八二原則,其實(shí)20%的接口就可以滿足80%的需求,剩下的80%應(yīng)該隱藏在背后。因?yàn)槁┑纳倏偸前踩?,不是嗎。剩下?0%專家接口可以隱藏與深層次。比如UIView遮蔽了大部分的CALayer接口,抽取構(gòu)造出更易用的frame和動畫實(shí)現(xiàn),這樣上手更容易。

END

責(zé)任編輯:倪明 來源: 空之境界投稿
相關(guān)推薦

2022-06-07 08:39:35

RPCHTTP

2020-11-25 09:36:17

HTTPRPC遠(yuǎn)程

2019-08-05 14:23:43

DockerKubernetes容器

2024-07-11 10:41:07

HTTPSHTTP文本傳輸協(xié)議

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網(wǎng)絡(luò)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

技術(shù)資訊

2017-04-17 11:50:13

51CTO 學(xué)院

2020-05-22 13:00:45

蘋果安卓手機(jī)

2020-06-10 09:06:48

MongoDB架構(gòu)高可用

2017-01-18 09:42:11

Go

2023-06-26 08:20:02

openapi格式注解

2024-04-23 08:04:45

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號