內(nèi)存泄漏理解

1.簡(jiǎn)單理解

內(nèi)存泄漏指的是堆內(nèi)存泄漏,棧不會(huì)發(fā)生內(nèi)存泄漏,只會(huì)發(fā)生棧溢出(StackOverFlow)。
簡(jiǎn)單一個(gè)創(chuàng)建對(duì)象的方法:

A *a = [[A alloc]init];

a指針存在于棧上,a所指向的A的對(duì)象存在于堆上。
a為nil時(shí),A的對(duì)象沒釋放掉,那么就發(fā)生內(nèi)存泄漏了。
比如iOS很多C框架的東西(OC有自動(dòng)引用機(jī)制,不需要手動(dòng)釋放)

{
//dtimer指針在棧空間,dispatch_source_t對(duì)象在堆空間
dispatch_source_t dtimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(0, 0));
    dispatch_source_set_timer(dtimer, DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC, 1 * NSEC_PER_SEC);
    dispatch_source_set_event_handler(dtimer, ^{
        
        sum--;
        
        NSLog(@"sum:%d",sum);
    });
    
 //釋放dtimer指向的堆空間
    dispatch_resume(dtimer);
//如果不釋放,函數(shù)執(zhí)行完畢,dtimer變量就沒了,造成內(nèi)存泄漏。
}

如果A對(duì)象釋放了,a沒有回收,那么就是野指針。

{
while(true)
{
A *a = [[A alloc]init];
}
}

這樣就會(huì)造成StackOverFlow。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 內(nèi)存管理 簡(jiǎn)述OC中內(nèi)存管理機(jī)制。與retain配對(duì)使用的方法是dealloc還是release,為什么?需要與a...
    丶逐漸閱讀 2,080評(píng)論 1 16
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,602評(píng)論 30 472
  • JVM內(nèi)存模型Java虛擬機(jī)(Java Virtual Machine=JVM)的內(nèi)存空間分為五個(gè)部分,分別是: ...
    光劍書架上的書閱讀 2,772評(píng)論 2 26
  • 1.項(xiàng)目經(jīng)驗(yàn) 2.基礎(chǔ)問題 3.指南認(rèn)識(shí) 4.解決思路 ios開發(fā)三大塊: 1.Oc基礎(chǔ) 2.CocoaTouch...
    扶光啟玄閱讀 5,202評(píng)論 0 13
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 2,242評(píng)論 0 7

友情鏈接更多精彩內(nèi)容