我对 ARC 有疑问。经过几个小时的调试,我放弃了,决定在这里检查。
基本上我有一个MainViewController
,它创建的实例PreviewsView
。
在PreviewsView
我有委托和数据源属性:
@property (nonatomic, unsafe_unretained) IBOutlet id<PreviewsDataSource> dataSource;
@property (nonatomic, unsafe_unretained) IBOutlet id<PreviewsDelegate> delegate;
我创建PreviewsView
in 的实例MainViewController
,设置self
为delegate
and 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 仍然存在并正在运行。
任何想法为什么?谢谢。