

oc對(duì)象可以調(diào)用class方法看下這個(gè)對(duì)象的類型?。?!所以block也是可以的

所以實(shí)例對(duì)象調(diào)用superclass方法和類對(duì)象調(diào)用superclass方法返回的值是一樣的,都是該類的父類對(duì)象!??!


因?yàn)槲覀兂绦蚨际桥茉趦?nèi)存中,那內(nèi)存中放的是什么東西,那它真正的結(jié)果就是什么東西?。。∫磺惺且赃\(yùn)行時(shí)結(jié)果為準(zhǔn),也就是說block在內(nèi)存中確實(shí)有以上三種類型~

text段放代碼--我們俗稱代碼段!代碼段的內(nèi)存地址值一般來說是比較小的,也就是比較前面。平時(shí)我們自己寫的代碼,一般都放在text段也就是代碼段。

越往下內(nèi)存地址值越大!
data段--就是數(shù)據(jù)段,一般用來存放全局變量,

比如上圖中的age
堆區(qū):是動(dòng)態(tài)分配內(nèi)存的,比如我們平時(shí)alloc出來的對(duì)象就是放在堆區(qū),一旦調(diào)用alloc,就需要?jiǎng)討B(tài)分配內(nèi)存。堆區(qū)的特點(diǎn),就是需要我們程序員自己寫些代碼去申請(qǐng)內(nèi)存,
---堆動(dòng)態(tài)分配內(nèi)存,需要程序員自己申請(qǐng)內(nèi)存,也需要程序員自己管理內(nèi)存。
棧區(qū)放一些局部變量,或者函數(shù)參數(shù),特點(diǎn)是系統(tǒng)自動(dòng)分配內(nèi)存,也會(huì)自動(dòng)銷毀內(nèi)存,當(dāng)局部變量離開大括號(hào),離開作用域就會(huì)自動(dòng)銷毀。
text段和數(shù)據(jù)段也不需要我們管,是編譯器決定好的。我們這個(gè)代碼一旦編譯成功,就會(huì)自動(dòng)把代碼和全局變量分別放到代碼段和數(shù)據(jù)段,程序一啟動(dòng),就會(huì)把我們的代碼和全局變量那些數(shù)據(jù)搬到內(nèi)存中來。
全局block跟全局變量放一起,堆block放在堆區(qū),跟一般的oc對(duì)象是一樣的,堆block的內(nèi)存需要程序員自己去銷毀。棧block放在棧區(qū),棧block的內(nèi)存會(huì)自動(dòng)銷毀?。?!





訪問auto變量的block是棧block,棧block的內(nèi)存放在棧上,既然棧block的內(nèi)存放在棧上,當(dāng)test2這個(gè)函數(shù)調(diào)用完畢的時(shí)候,那這個(gè)函數(shù)棧上的一些東西就有可能被銷毀了,一旦銷毀的話,就肯定會(huì)影響到block內(nèi)部的一些東西,這樣的話,雖然block是個(gè)全局變量,外面能訪問,但真正在去執(zhí)行block里面那份代碼的話,就出現(xiàn)混亂了。上圖中的棧block是放棧的,既然block的內(nèi)存是放棧上的,那test2這個(gè)函數(shù)調(diào)用完,test2函數(shù)棧要銷毀了,那block結(jié)構(gòu)體里面存儲(chǔ)的數(shù)據(jù)可能變成垃圾數(shù)據(jù)了(這種可以理解為以前我們寫通知的時(shí)候,在不用的時(shí)候,需要移除通知的原理一樣。因?yàn)橥ㄖ行臅?huì)保存對(duì)應(yīng)對(duì)象的內(nèi)存地址,當(dāng)對(duì)象的內(nèi)存地址銷毀后,還拿通知中心保存的對(duì)象地址去訪問對(duì)象原先的內(nèi)存地址的時(shí)候,就會(huì)出現(xiàn)野指針錯(cuò)誤,所以不用的時(shí)候要移除通知)
全局block調(diào)用copy之后還是全局block,棧block調(diào)用copy變成堆block?。?!


ARC環(huán)境下,如果block使用copy修飾的,上圖中給person的blcok賦值, ^{}會(huì)自動(dòng)調(diào)用copy!
函數(shù)調(diào)用棧就是你要調(diào)用這個(gè)函數(shù)的時(shí)候,就會(huì)指定一塊棧區(qū)空間給你這個(gè)函數(shù)用,專門給你這個(gè)函數(shù)用,但是你這個(gè)函數(shù)一旦調(diào)用完畢以后,棧區(qū)這塊空間就會(huì)回收,也相當(dāng)于變成垃圾數(shù)據(jù),以后會(huì)給別人用,會(huì)被別人給覆蓋。
在函數(shù)外面定義的變量稱為全局變量,在函數(shù)里面定義的變量稱為局部變量。
