你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 你給我解析清楚,都有了CALayer了,為什麼還要UIView

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

編輯:IOS開發基礎

本文是投稿文章,作者:空之境界(博客)
“你給我解析清楚,都有了CALayer了,為什麼還要UIView!” 聽到這種問題,是不是愣住了。

shagou.jpg

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

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

zhengjing2.jpg

UILayer

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

21.png

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

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

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

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

QQ截圖20150828091358.png

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

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

QQ截圖20150828091414.png

分析

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

  • 機制與策略分離

  • 更多的不可變

  • 各司其職

  • 漏的更少

機制與策略分離

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

更多的不可變

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

各司其職

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

漏的更少

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

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved