6
Jestem dość zdezorientowany, jak zmienić zmienną instancji wewnątrz bloku.Zmiana zmiennej instancji w bloku
Plik interfejs (.h):
@interface TPFavoritesViewController : UIViewController {
bool refreshing;
}
Realizacja:
__weak TPFavoritesViewController *temp_self = self;
refreshing = NO;
[myTableView addPullToRefreshWithActionHandler:^{
refreshing = YES;
[temp_self refresh];
}];
Jak można się domyślać, otrzymuję ostrzeżenie zachować cyklu, gdy próbuję zmienić orzeźwiający ivar od wewnątrz blok. Jak mógłbym to zrobić bez otrzymania błędu?
Nie kompiluje się tylko z tym kodem. Pojawia się następujący błąd: Wyłuskanie __weak nie jest dozwolone z powodu możliwej wartości pustej spowodowanej przez stan wyścigu, najpierw przypisz ją do silnej zmiennej. Myślę, że działałem, dodając: __strong TPRideListView * strong_self = temp_self; strong_self-> refreshing = YES; –
Ostrożnie; dereferencja słabego wskaźnika może doprowadzić do awarii. Lepiej zrobić silny wskaźnik ze słabego wewnątrz bloku, sprawdzić zero i użyć tego. –
@KeiranPaster - przepraszam za drugim ostrzeżeniem; jeśli twój kod utrzymuje ostrzeżenia w tajemnicy, działa to * pod warunkiem, że * twój obiekt pozostaje w pobliżu (tzn. 'self' jest ważny); kod nie zajmuje się wartością 'nil'. Zakładam, że wiesz, że to jest, jeśli nie ... – CRD