生活随笔
收集整理的這篇文章主要介紹了
关于内存管理-提前释放的问题
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最近接受了一個(gè)項(xiàng)目,代碼構(gòu)造是很好的,但是還是使用mrc的管理方法,這次又算讓我學(xué)習(xí)了一次內(nèi)存管理,遇到內(nèi)存釋放crash的問題,搜了一篇文章,不妨使用下面的方法,可以有一個(gè)很好地定位。
在XCode的以前版本中,如果遇到了
[代碼]c#/cpp/oc代碼:
| 1 | message sent to deallocated instance 0x6d564f0 |
我們可以使用info malloc-history 0x6d564f0來查看調(diào)用堆棧來查看崩潰發(fā)生的地方,這種方法這里不作闡述,大家自行百度。 在新的XCode里,調(diào)試器默認(rèn)使用LLDB,我就講一下如何在LLDB狀態(tài)下定位到由于內(nèi)存操作不當(dāng)引起的Crash 首先我有一段會(huì)發(fā)生崩潰的代碼:
[代碼]c#/cpp/oc代碼:
| 1 | NSString *themePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:themePathTmp]; |
| 3 | ??self.backgroundIV.image = [UIImage imageWithContentsOfFile:[themePath stringByAppendingPathComponent:@"mask_1.png"]]; |
學(xué)過內(nèi)存管理的人都應(yīng)該知道在這里themePath并沒有被retain,所以如果寫了release,那么必然會(huì)發(fā)生崩潰情況。首先我們需要對(duì)開發(fā)的環(huán)境變量進(jìn)行設(shè)置 運(yùn)行代碼,出現(xiàn)下面的崩潰現(xiàn)象 下面我們打開“活動(dòng)監(jiān)視器”,找到我們對(duì)應(yīng)的PID,我們的Target為HPThemeManager,只要找到HPThemeManager對(duì)應(yīng)的PID就可以(HPThemeManager是在論壇里下載的,本來正在看代碼,就直接拿他來作試驗(yàn)了) 現(xiàn)在,我們得到了兩個(gè)主要的信息: 進(jìn)程ID:50127 崩潰地址:0x6d564f0
我們打開終端,輸入以下命令:
[代碼]c#/cpp/oc代碼:
| 1 | sudo malloc_history 50127 0x6d564f0 |
結(jié)果顯示為:
這樣我們用能定位到這行代碼
[代碼]c#/cpp/oc代碼:
| 1 | NSString *themePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:themePathTmp]; |
對(duì)themePath進(jìn)行排查,就找到了崩潰的罪魁禍?zhǔn)?
[代碼]c#/cpp/oc代碼:
?原文地址:http://www.devdiv.com/lldb_message_sent_to_deallocated_instance_-blog-50901-50856.html 分類:?objective-c
轉(zhuǎn)載于:https://www.cnblogs.com/lixiong-iOS/p/4446676.html
總結(jié)
以上是生活随笔為你收集整理的关于内存管理-提前释放的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。