У меня есть небольшое недоразумение относительно ARC. Я создаю новый UIViewController, используя следующий код:ARC и ViewControllers
CGRect screenRect = [[UIScreen mainScreen] bounds];
LocationProfileView *locationProfile = [[LocationProfileView alloc] initWithLocation:l];
locationProfile.view.frame = CGRectMake(0, screenRect.size.height, screenRect.size.width, 400);
[appDelegate.window addSubview:locationProfile.view];
[UIView animateWithDuration:.25 animations:^{
locationProfile.view.frame = CGRectMake(0, 0, screenRect.size.width, screenRect.size.height);
}];
В своей UIView я поставил кнопку, которая удаляет вид с экрана. Проблема заключается в том, что locationProfile
получает освобождение сразу после его добавления на экран, поэтому каждый раз, когда я пытаюсь нажать кнопку «Закрыть» (которая вызывает метод в классе LocationProfileView
), мое приложение выйдет из строя.
Поэтому я добавил свойство:
@property(nonatomic, strong) LocationProfileView *locationProfile;
и изменил вторую строку кода в:
locationProfile = [[LocationProfileView alloc] initWithLocation:l];
, но теперь мой класс не будет освобождаться, пока я не начать его снова (потому что это теряет ссылку на первый экземпляр LocationProfileView
?). Что делать, чтобы мой класс был освобожден каждый раз, когда я нажимаю кнопку «Закрыть»? Я думаю, что установка locationProfile
на nil
будет работать, но это означает, что мне придется вызвать метод в основном классе (тот, который содержит блок кода).
Каков правильный способ для этого? Извините, если мои вопросы слишком нообы.
Примечание: l
является экземпляром пользовательского класса, который содержит некоторые Infos, которые будут отображаться в LocationProfileView
«s UIVIew
.
Где 'UIViewController', что вы говорите? – Richard