轉(zhuǎn)帖|行業(yè)資訊|編輯:龔雪|2016-06-03 09:47:40.000|閱讀 285 次
概述:兩行代碼引發(fā)的血案。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
首先把肇事代碼貼上來(lái):
self.class = dic[@"class"];//model的init方法里 NSLog(@"%@ ",model);
從這兩行代碼,相信很多都人都能看出來(lái),這是一位新手寫(xiě)的代碼,給model設(shè)置了一個(gè)名為class的屬性,我更相信,有絕大部分知道不能這樣寫(xiě),會(huì)崩潰,但具體不知道什么原因。
于是,故事開(kāi)始了。
ps:技術(shù)總是在不斷的探討,探索中升華。
這樣寫(xiě)會(huì)崩潰,但是崩潰日志是不存在的,但是我想有一部分人,沒(méi)有看過(guò)這個(gè)類(lèi)的內(nèi)部信息。
下面我先來(lái)簡(jiǎn)單分析下,不喜勿噴。
在項(xiàng)目中,崩潰后會(huì)一直停留在這里。(我的項(xiàng)目里是這樣的)
控制臺(tái)上右側(cè)顯示的東西,這些東西你能看到怎么崩潰的嗎?經(jīng)驗(yàn)豐富的應(yīng)該可以吧。 接下來(lái)是重點(diǎn)了,咱們來(lái)看看控制臺(tái)左側(cè)的東西(我不怕麻煩,一個(gè)個(gè)點(diǎn)開(kāi)了0.0)。
里面的東西都是model的屬性了,這個(gè)不需要解釋了。
但是大家總結(jié)寫(xiě)規(guī)律,屬性為空的,有個(gè)東西也是空,對(duì),就是 “isa”
但是這個(gè)為空,跟崩潰有什么關(guān)系呢?
于是開(kāi)始討論了。討論內(nèi)容就不說(shuō)了。總結(jié)總結(jié)吧!
class是任何一個(gè)類(lèi)都有的屬性,大家都知道它是關(guān)鍵字,也都知道,關(guān)鍵字是不能隨便動(dòng)的。其原因呢?
這是我的總監(jiān)曾經(jīng)跟我說(shuō)的一句話(huà)。
通過(guò)類(lèi)的結(jié)構(gòu)可以看出,每個(gè)類(lèi)都有一個(gè)isa指針,每個(gè)對(duì)象也有一個(gè)isa指針。那么isa是干嘛的呢?
這是群內(nèi)人員現(xiàn)場(chǎng)寫(xiě)的一個(gè)結(jié)構(gòu)圖。筆者又自己找了兩張比較完善的流程圖。
通過(guò)上面的總結(jié),配合著兩張圖,相信大家都能看懂了吧?
我先不說(shuō)結(jié)果,帶大家走一遍流程:
大家會(huì)發(fā)現(xiàn),第一個(gè)打印的是你賦值的的內(nèi)容,第二次打印出來(lái),是這個(gè)對(duì)象的類(lèi)的類(lèi)名。
第一次崩潰,是因?yàn)榇蛴odel蹦,那么把class屬性刪了之后,再打印model看看。
通過(guò)上面的講解,和這里的測(cè)試,相信大家多多少有些概念了吧,大致對(duì)崩潰的原因有個(gè)模糊的概念。這里我就不做具體原因的講解了。大家可以提問(wèn),也可以發(fā)表自己的意見(jiàn)。
另外送大家一段代碼,在類(lèi)里面加上,在打印這個(gè)類(lèi)的實(shí)例對(duì)象,看看是什么結(jié)果吧。
-(NSString *)description{ return @"結(jié)果"; }
本文來(lái)源:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn