NSZombieEnabled又讓我調試到深夜三點

來源:互聯網
上載者:User

最近這個項目在用ARC,在追蹤記憶體的時候,發現記憶體不對。
這樣的情況下就不會調用dealloc方法:
@interface Obj1 : NSObject 

    Obj2 *obj2;    

 
@interface Obj2 : NSObject 


 
@implementation Obj1 
 
-(void)dealloc 

    //obj2 = nil;  // <--- This is needed to get obj2 to be dealloc'd. 
    NSLog(@"Obj1 dealloc"); 

 
-(id)init 

    if ((self = [super init]) == nil) 
        return nil; 
 
    obj2 = [[Obj2 alloc] init]; 
 
    return self; 

 
@end 
 
@implementation Obj2 
 
-(void)dealloc 

    NSLog(@"Obj2 dealloc"); 

 
-(id)init 

    if ((self = [super init]) == nil) 
        return nil; 
 
    return self; 

 
@end 

如果obj1的dealloc斷點斷下來了,那麼也會調用obj2的dealloc也會斷下來,可是無論如何也不會斷。 開始我在obj1的dealloc加obj2 = nil,讓其回收記憶體,可是ARC有這個功能,不需要加這行呀。  一直無解呀,代碼沒問題,最後check 設定(弄了好多個小時),原來開啟了NSZombieEnabled。汗水都出來了,上次吃了NSZombieEnabled的虧,這次又栽在它手上。不過總算找到原因了,不過這幾個小時都做的無用功,只有長點經驗值。

 


摘自 開心程式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.