So habe ich den folgenden Code:Zuweisen einer Variablen innerhalb eines Blocks erfordert schwache Referenz?
[serviceHandler getHomeConfigurationData:^(NSDictionary *data){
if (data) {
NSLog(@"The Data: %@", data);
homeConfigData = data;
}
} failure:^(NSError *error, BaseServiceHandler *context){
homeConfigData = Nil;
NSLog(@"Error: %@", error);
}];
hier ist homeConfigData
eine Instanzvariable in meinem Viewcontroller. Diese gesamte Methode wird in einem Hintergrundthread ausgeführt. Es ist möglich, dass der ViewController freigegeben wird, sobald der Completion-Block zurückkehrt/ausgelöst wird. Also mache ich mir Sorgen, wenn ich ein Problem bekomme, wenn ich die Linie mache homeConfigData = data;
Wie würde ich damit umgehen?
Wenn weakSelf zu null wird, erhalten wir Nil = Daten. Wird das einen Absturz verursachen? Auch, bin ich richtig in der Annahme, dass ich das tun sollte? Ich kann auch weakSelf.homeConfigData nicht tun, weil "homeConfigData" eine Instanzvariable ist – user1416564
Ich befolge Ihre Bedenken nicht. 'weakSelf' sollte ein Zeiger auf eine Instanz sein, daher sollte die Verwendung einer Instanzvariablen kein Problem sein. 'data' ist nicht Nil, aber' weakSelf.homeConfigData = data' ist ein No-Op, weil 'weakSelf' gleich Null ist. Wenn Sie weitere Probleme haben, senden Sie weiteren Code. –
Okay, lass es mich nochmal versuchen. 'homeConfigData' ist eine private Variable. Dies bedeutet, dass Sie 'self.homeConfigData' nicht ausführen können. Es wird nicht kompiliert. Wie auch immer, ich habe es geschafft, eine Lösung zu finden und 'homeConfigData' einfach zu deklarieren, indem ich' ___block' im Vordergrund benutze. – user1416564