У меня проблема с ARC. После нескольких часов отладки я сдался и решил проверить здесь.ARC не освобождает переменную экземпляра
В основном у меня есть MainViewController
, который создает экземпляр PreviewsView
.
В PreviewsView
у меня есть делегат и DataSource свойства:
@property (nonatomic, unsafe_unretained) IBOutlet id<PreviewsDataSource> dataSource;
@property (nonatomic, unsafe_unretained) IBOutlet id<PreviewsDelegate> delegate;
Я создаю экземпляр PreviewsView
в MainViewController
, установите 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 освобождает, НО previewsView
все еще существует (W HY ???) и фактически запускает метод, который вызывает [self.delegate doSomeStuff]
. Поскольку MainViewController
уже освобождает - он выбрасывает EXC_BAD_ACCESS
.
Так в основном:
- Инстанция
MainViewController
владеет экземпляромPreviewsView
(previewsView) - Инстанция
MainViewController
назначенdelegate
иdataSource
вPreviewsView
- После открепления экземпляра
MainViewController
, previewsView все еще жив и Бег.
Любые идеи, почему? Спасибо.
Преднамеренно ли вы создаете представление с именем 'previewsView' (в методе' addPreviews'), но добавляете совершенно другое подвью ('previewsCaroucel')? – omz
извините, это связано с переименованием переменных перед публикацией здесь – OgreSwamp