@MeGaPk
iOS Программист, 3д печатник

Что означает Capturing 'self' strongly in this block is likely to lead to a retain cycle?

Добрый день!
Компилятор выдает такое предупреждение:
Capturing 'self' strongly in this block is likely to lead to a retain cycle

При таком куске кода:

_autocompleteViewDestination.didAutocompleteWith = ^(id item) {
NSLog(@"Autocompleted with: %@", item.completionText);
[self.session saveDestinationPointWith:item.completionText andLocation:item.location]; <<<
};


Собственно я хотел бы узнать, что это означает и как с этим бороться правильно с включенным ARC.

Заранее спасибо за ответ!
  • Вопрос задан
  • 302 просмотра
Решения вопроса 1
ManWithBear
@ManWithBear
Swift Adept, Prague
Компилятор вам говорит, что у вас есть ссылка на блок, а у блока есть ссылка на вас. В итоге АРС не сможет удалить эти два объекта и они будут вечно в памяти. Что в конечном итоге приводит к утечке памяти.
Бороться можно:
1) Убрав ссылку на блок, если она не критична, либо сделав её weak
2) Передавать себя в блок по слабой ссылке:
__weak MyClass *me = self;
... = ^() {
[me.session ...];
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы