我有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