2012-02-14 58 views
0

可能重複:
Why is object not dealloc'ed when using ARC + NSZombieEnabled自動引用計數不工作

我一定要在這裏做了什麼。編譯器設置爲Apple LLVM Compiler 3.0,Objective-C自動引用計數設置爲YES。我還有第三方軟件,需要ARC才能激活。

所以我的基本問題是我的屬性不會被釋放。我有以下標題:

@interface ArchiveController : UIViewController <CloseSubviewDelegate> { 
    NSArray *journals; 
    NSMutableArray *archiveViews; 
} 

@property (nonatomic, strong) NSArray *journals; 
@property (nonatomic, strong) NSMutableArray *archiveViews; 

.... 

@end 

我合成的和初始化數組archiveViews像這樣:

self.archiveViews = [NSMutableArray array]; 

後來我對象添加到它,一切工作正常;相同的雜誌陣列。

我添加了一個dealloc方法來檢查ArchiveController得到釋放:

-(void)dealloc 
{ 
    DLog(@"dealloc archive controller"); 
} 

它的工作原理,但陣列從未發佈;爲什麼?如果我改變dealloc方法這樣:

-(void)dealloc 
{ 
    DLog(@"dealloc archive controller"); 
    self.archiveViews = nil; 
} 

一切工作正常,但是那不是事情應該是這樣的吧?我100%肯定數組及其對象在其他地方沒有被引用。

而不是預處理器應該處理插入所有保留/釋放/ deallocs?當我讓Xcode生成預處理的輸出時,沒有什麼似乎改變了!

+0

你怎麼知道數組沒有被釋放? – 2012-02-29 21:09:05

+0

通過在構建階段區域添加每個文件編譯標誌,可以逐個文件地關閉ARC。據推測,這不是這種情況,但可能值得仔細檢查。將關閉此標誌是'-fno-objc-arc'。 – 2012-02-29 21:22:56

+0

,因爲數組內的對象從不釋放。 Thx凱文注意到,但事實並非如此。 – cboe 2012-03-15 13:04:55

回答

0

我懷疑是循環依賴。

儀器可以幫助您有時找到它們。

+0

如果這裏有一個保留週期,那麼他的'-dealloc'根本不會被調用,這意味着'self.archiveViews = nil;'永遠不會運行。 – 2012-02-29 21:22:10