【发布时间】:2012-02-14 10:39:10
【问题描述】:
可能重复:
Why is object not dealloc'ed when using ARC + NSZombieEnabled
我一定是在这里做错了什么。 Compiler 设置为 Apple LLVM Compiler 3.0,Objective-C Automatic Reference Counting 设置为 YES。我还包含需要激活 ARC 的第 3 方软件。
所以我的基本问题是我的属性没有被释放。我有以下标题:
@interface ArchiveController : UIViewController <CloseSubviewDelegate> {
NSArray *journals;
NSMutableArray *archiveViews;
}
@property (nonatomic, strong) NSArray *journals;
@property (nonatomic, strong) NSMutableArray *archiveViews;
....
@end
我合成了这些并像这样初始化archiveViews数组:
self.archiveViews = [NSMutableArray array];
后来我向它添加对象,一切正常; journals 数组也一样。
我添加了一个 dealloc 方法来检查 ArchiveController 是否被释放:
-(void)dealloc
{
DLog(@"dealloc archive controller");
}
可行,但数组永远不会被释放;为什么?如果我将 dealloc 方法更改为:
-(void)dealloc
{
DLog(@"dealloc archive controller");
self.archiveViews = nil;
}
一切正常,但这不应该是这样,对吧?我 100% 确定该数组及其对象没有在其他任何地方引用。
预处理器不应该处理所有保留/释放/释放的插入吗?当我让 Xcode 生成预处理输出时,似乎什么都没有改变!
【问题讨论】:
-
你怎么知道数组没有释放?
-
可以通过在构建阶段区域添加每个文件的编译标志来逐个文件关闭 ARC。大概情况并非如此,但可能值得仔细检查。关闭此功能的标志是
-fno-objc-arc。 -
因为数组中的对象永远不会被释放。感谢 Kevin 的注意,但事实并非如此。
标签: ios automatic-ref-counting