一,定義:
一般把定義在枚舉、結(jié)構(gòu)體、類內(nèi)部的函數(shù),叫做方法。
二, 特點(diǎn):
1,方法不占用對(duì)象的內(nèi)存
2,方法的本質(zhì)就是函數(shù)
3,方法、函數(shù)都存放在代碼段
三,驗(yàn)證:

1,可以看到p對(duì)象占用32字節(jié)的內(nèi)存空間
前8個(gè)字節(jié)(0x000000010000c308):存放類型相關(guān)信息
接下來(lái)8個(gè)字節(jié)(0x0000000000000002):存放引用計(jì)數(shù)
第三個(gè)8個(gè)字節(jié)(0x000000000000000b):存放變量x(值為11)
最后8個(gè)字節(jié)(0x0000000000000016):存放變量y(值為22)



匯編界面查看路徑Xcode-> Debug -> Debug Workflow -> Always show Disassembly

調(diào)類中的方法,相當(dāng)于調(diào)全局方法,把類的對(duì)象傳進(jìn)去。并且不管全局方法還是類里的方法在內(nèi)存中只存在一份,某個(gè)類的多個(gè)對(duì)象調(diào)用方法,都是訪問(wèn)的同一個(gè)方法地址。
方法不會(huì)像類的變量,每個(gè)對(duì)象的變量可能需要存儲(chǔ)不同的值。方法都是一樣的,所以存在一份就夠了。
總結(jié):
1,從圖2和圖3可以看出,方法show(0x1000027a0)和方法show1(0x1000022f0)內(nèi)存地址挨的很近,并且和p對(duì)象的地址(0x1005207b0)隔的很遠(yuǎn),側(cè)面證明方法不在對(duì)象的內(nèi)存中。
2,
方法地址:
show1(代碼段): 0x1000022f0
show(代碼段): 0x1000027a0
全局變量(數(shù)據(jù)段): 0x10000c4e8
對(duì)象(堆空間): 0x1005207b0
局部變量(棧空間): 0x00007ffeefbff328
規(guī)律:
1,內(nèi)存地址從代碼段、數(shù)據(jù)段、堆空間、到棧空間,地址越來(lái)越大。
2,一般1后面帶4個(gè)0的地址,是代碼段和數(shù)據(jù)段。
3,一般1后面不是4個(gè)0的地址,是堆空間。
4,不是以上情況,地址很大的是??臻g。
內(nèi)存地址大致分布:

