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