來源:霖溦(@羽霖溦)
鏈接:http://www.jianshu.com/p/e9feb2c0c3f1
原有的工程用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之前的版本上運轉,是個恆成立的條件。。。條件編譯的限制也就得到了原本的意義。。。
所以應該這麼寫就對了:
【iOS10 CAAnimationDelegate 的復雜適配】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!