2016-09-01 13 views
1

Я использую ivar в блоке реактивного какао, устанавливаю ослабление (self) и закрепляю (self), чтобы разорвать цикл удержания. Но когда я запускаю код, он вызывает утечку памяти, контроллер не вызывает метод dealloc. Если я изменю ivar на свойство, он будет работать правильно. Я так запутался и долго искал. Пожалуйста, скажи мне почему.Почему использование ивара может вызвать удержание цикла в реактивном какао?

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    ... 
    @weakify(self); 
    [RACObserve(self, something) subscribeNext:^(id x) { 
     @strongify(self); 
     [_button setBackgroundColor:[UIColor redColor]]; 
    }]; 
} 

- (void)dealloc { 

} 

ответ

2

@strongify(self) объявить новую переменную с именем я и при вызове self.button использовать эту новую переменную, _button неявно использовать не перекрываться

и настраивает
+0

'@weakify (само)' объявить слабый себя, '@ strongify (self) 'объявляет сильное« я ». 'self.button' означает использовать сильную, но' _button' не использует ее. спаси мой день. – Monqi

 Смежные вопросы

  • Нет связанных вопросов^_^