我有ARC问题。经过几个小时的调试,我放弃了,并决定在这里检查。ARC不会发布实例变量
基本上我有一个MainViewController
,它创建了PreviewsView
的实例。
在PreviewsView
我有代表且dataSource属性:
@property (nonatomic, unsafe_unretained) IBOutlet id<PreviewsDataSource> dataSource;
@property (nonatomic, unsafe_unretained) IBOutlet id<PreviewsDelegate> delegate;
我在MainViewController
创建的PreviewsView
实例,设置self
作为delegate
和dataSource
,把它添加到查看并保存为一个实例变量:
- (void)addPreviews {
previewsView = [[PreviewsView alloc] initWithFrame:CGRectMake(0, 75, 1024, 480)];
previewsView.dataSource = self;
previewsView.delegate = self;
[self.view addSubview:previewsView];
}
然后,当我从导航控制器中删除MainViewController
ACR解除分配时,BUT previewsView
仍然存在(W HY ???)并且实际运行触发[self.delegate doSomeStuff]
的方法。由于MainViewController
已经释放 - 它会抛出EXC_BAD_ACCESS
。
所以基本上:
- 的
MainViewController
实例拥有的PreviewsView
实例(previewsView)的MainViewController
- 比如在
PreviewsView
- 指定为
delegate
和dataSource
的MainViewController
释放实例之后,previewsView仍然活着,运行。
任何想法为什么? 谢谢。
是否有意创建一个名为'previewsView'的视图(在'addPreviews'方法中),但添加完全不同的子视图('previewsCaroucel')? – omz 2012-04-26 15:10:10
对不起,这是因为在发布之前重命名变量 – OgreSwamp 2012-04-26 15:14:43