我对 ARC 有疑问。经过几个小时的调试,我放弃了,决定在这里检查。
基本上我有一个MainViewController,它创建的实例PreviewsView。
在PreviewsView我有委托和数据源属性:
@property (nonatomic, unsafe_unretained) IBOutlet id<PreviewsDataSource> dataSource;
@property (nonatomic, unsafe_unretained) IBOutlet id<PreviewsDelegate> delegate;
我创建PreviewsViewin 的实例MainViewController,设置self为delegateand dataSource,将其添加到视图并保存为实例变量:
- (void)addPreviews {
previewsView = [[PreviewsView alloc] initWithFrame:CGRectMake(0, 75, 1024, 480)];
previewsView.dataSource = self;
previewsView.delegate = self;
[self.view addSubview:previewsView];
}
然后当我MainViewController从导航控制器中删除 ACR deallocates 时,BUTpreviewsView仍然存在(为什么???)并实际运行触发的方法[self.delegate doSomeStuff]。正如MainViewController已经解除分配 - 它抛出EXC_BAD_ACCESS。
所以基本上:
- 实例
MainViewController拥有PreviewsView(previewsView)的实例 MainViewController分配为delegate和dataSource在中的实例PreviewsView- 释放实例后
MainViewController, previewsView 仍然存在并正在运行。
任何想法为什么?谢谢。