日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

load initialize

發(fā)布時(shí)間:2023/12/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 load initialize 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一 、+load 調(diào)用時(shí)機(jī)

+load方法會(huì)在app啟動(dòng)的時(shí)候,只要類(lèi)被引用(子類(lèi)或父類(lèi)文件),就會(huì)默認(rèn)調(diào)用每個(gè)相關(guān)類(lèi) + load方法,只會(huì)調(diào)用一次,并且是在 main函數(shù)之前執(zhí)行的。

+load執(zhí)行順序

父類(lèi)》子類(lèi)》類(lèi)別;

不同子類(lèi),父類(lèi)的和子類(lèi)的Category的加載順序,根據(jù) Compile Sources中的順序執(zhí)行(最靠上的先執(zhí)行)。

舉例

Student Teacher都繼承自 Person

Person兩個(gè)CategoryPerson+PersonCatPerson+PersonCat2

Teacher CategoryTeacher+TeacherCat

如圖




+load 執(zhí)行的順序?Person》Student》Teacher》TeacherCat》PersonCat》PersonCat2
備注: TeacherCat-PersonCat-PersonCat2 ,調(diào)用順序?跟?Compile Sources中的文件順序有關(guān)。? Student-Teacher+load調(diào)用順序?跟?Compile Sources中文件的順序有關(guān)?

二、+ initialize 方法調(diào)用時(shí)機(jī)

當(dāng)?shù)谝粋€(gè)類(lèi)實(shí)例加載前執(zhí)行+initialize,且只會(huì)調(diào)用一次,如果沒(méi)有再向類(lèi)發(fā)送消息的話,這個(gè)方法將不會(huì)被調(diào)用。

+ initialize執(zhí)行順序

舉例

Teacher 繼承自 Person,當(dāng)實(shí)例話Teacher時(shí):

如果Teacherinitialize沒(méi)有,Personinitialize會(huì)執(zhí)行兩次

如果Teacherinitialize有,先執(zhí)行Personinitialize,在執(zhí)行Teacherinitialize。

如果 TeacherCategoryTeacherCat)和 Person(PersonCat)都有initialize,兩個(gè)分類(lèi)的方法會(huì)覆蓋原類(lèi)的initialize;且父類(lèi)分類(lèi)方法比子類(lèi)先執(zhí)行。

備注:最后一個(gè)類(lèi)別(Category)中的initialize方法會(huì)覆蓋之前類(lèi)別和類(lèi)中的initialize方法,如上圖的PersonCat2就是Person的最后一個(gè)類(lèi)別,他會(huì)覆蓋Person、PersonCat的initialize方法


三、+load與+ initialize 小結(jié)

1initializeload,不需要在這兩個(gè)方法的實(shí)現(xiàn)中使用super調(diào)用父類(lèi)的方法。

2、initializeload,被調(diào)用一次是相對(duì)runtime而言,你可以當(dāng)作普通類(lèi)方法多次調(diào)用。

3、類(lèi)加載到系統(tǒng)的時(shí)候就用調(diào)用load方法,類(lèi)首次使用的時(shí)候調(diào)用initialize方法。

4、load不像普通方法一樣遵從那套繼承規(guī)則,當(dāng)每個(gè)類(lèi)沒(méi)有實(shí)現(xiàn)load方法,不管各級(jí)超類(lèi)是否實(shí)現(xiàn),系統(tǒng)都不會(huì)調(diào)用此類(lèi)的load方法。

5、runtime調(diào)用+(void)load的時(shí)候,程序還沒(méi)有建立其autorelease pool,所以那些會(huì)需要使用到autorelease pool的代碼,都會(huì)出現(xiàn)異常。這一點(diǎn)是非常需要注意的,也就是說(shuō)放在+(void)load中的對(duì)象都應(yīng)該是alloc出來(lái)并且不能使用autorelease來(lái)釋放。

6load方法調(diào)用的順序:父類(lèi)(Superclass)的方法優(yōu)先于子類(lèi)(Subclass)的方法,類(lèi)中的方法優(yōu)先于類(lèi)別(Category)中的方法。

7、所有類(lèi)別(Category)中的load方法都會(huì)執(zhí)行。

8、initialize執(zhí)行晚于load方法。
9+initialize調(diào)用是線程安全的。

總結(jié)

以上是生活随笔為你收集整理的load initialize的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。