国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS10 CAAnimationDelegate 的簡單適配

2019-11-09 16:52:52
字體:
來源:轉載
供稿:網友

來源:霖溦(@羽霖溦) 鏈接:http://www.jianshu.com/p/e9feb2c0c3f1

一、iOS10中CAAnimationDelegate的警告

原有的工程用xcode8打開編譯后,莫名的增加了許多警告,其中關于動畫的警告有這樣一個,雖然運行后發現并沒有什么影響,但還是要探究一下:

這里寫圖片描述

在這里的原因就很明了了,動畫的代理沒有遵循協議。

于是: 這里寫圖片描述

把這段代碼再用xcode7編譯一下試試。。。報錯了。。。。。。為什么呢?

仔細想下,在iOS10之前寫動畫的協議方法,從來就沒記得要去遵循系統的動畫代理,iOS10偏偏又因為這里給了個警告,還是先仔細對比下API吧:

iOS9.2下的api: 這里寫圖片描述 iOS 10.2下的api: 這里寫圖片描述

iOS10之前,CAAnimationDelegate只是基類的分類方法,是擴展,至于為什么也要像協議方法那樣指定代理對象,應該是和其內部實現有關(只是用該指針在內部調用對應類的方法),需要代理對象。但在iOS10以后,CAAnimationDelegate從分類蛻變為獨立的協議方法了,所以不遵循協議,就給了警告。仔細觀察一下CAAnimationDelegate的delegate對象,它一直是一個strong類型,一般代理變量不都是weak嗎?關于這點,本人只是結合API的注釋理解為:animation是跟隨layer->view的生命周期的,需要特定的設置釋放,所以循環引用的問題不作考慮。

二、iOS10中CAAnimationDelegate的適配

利用__ipHONE_OS_VERSION_MAX_ALLOWED系統宏進行條件編譯,做法如下: 這里寫圖片描述 但是xcode7上編譯還是報錯,這是因為__IPHONE_10_0這個宏,這個宏代表了系統版本,每次系統跟新,宏也會對應增加新的,看下其定義: 這里寫圖片描述

這就是問題所在了,因為舊版本的API中,下面關于iOS10這句版本宏定義,根本不存在,也就是說,#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0這句在xcode8之前的版本上運行,是個恒成立的條件。。。條件編譯的限制也就失去了本來的意義。。。

所以應該這么寫就對了: 這里寫圖片描述


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 定州市| 长宁区| 车险| 松江区| 西宁市| 远安县| 慈利县| 洞口县| 丹凤县| 宜城市| 达拉特旗| 吉首市| 吉安县| 嘉善县| 武穴市| 贡山| 进贤县| 汕尾市| 台江县| 沧州市| 四平市| 舞阳县| 宜昌市| 凌海市| 木兰县| 民和| 岳池县| 应城市| 五大连池市| 措美县| 英德市| 股票| 上思县| 且末县| 安西县| 太康县| 密山市| 灵石县| 视频| 涞水县| 剑川县|