2012-02-14 61 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