Ich erhalte gelegentlich Abstürze in meinen GCDWebServer-Handlern, die auf änderbare Wörterbücher zugreifen. Die GCDWebServer ReadMe sagt, dass die Handler "auf beliebigen Threads innerhalb von GCD ausgeführt werden, so dass besonders auf Thread-Sicherheit und Re-Enrancy geachtet werden muss", und ich denke, das ist mein Problem. Gibt es eine Best Practice oder ein empfohlenes Muster für den Zugriff auf änderbare Eigenschaften des übergeordneten Objekts von den Handlern?Zugriff auf veränderbare Daten von einem GCDWebServer-Request-Handler
Ich weiß nicht, ob ich zwischen Threads synchronisieren kann, da ich die Handler-Threads nicht erstellen. Außerdem stelle ich mir vor, ich könnte einen asynchronen Handler verwenden, dann eine Methode für den Haupt-Thread von dort aufrufen, dann meine Arbeit mit dieser Methode machen und dann die Antwort senden, aber das scheint komplizierter und weniger effizient als nötig.
Hier ist eine vereinfachte Version von meinem Code:
@property (nonatomic, strong) NSMutableDictionary *data;
@property (nonatomic, strong) GCDWebServer *webServer;
- (void)setup {
self.data = [NSMutableDictionary dictionary];
[self.data setObject:@"1" forKey:@"status"];
self.webServer = [[GCDWebServer alloc] init];
[self.webServer addHandlerForMethod:@"GET" path:@"/getStatus.txt" requestClass:[GCDWebServerRequest class] processBlock:^(GCDWebServerRequest *request) {
return [self handleStatusRequest:request];
}];
}
- (GCDWebServerDataResponse *)handleStatusRequest:(GCDWebServerRequest *)request {
NSString *status = [self.data objectForKey:@"status"]; // crash here
return [GCDWebServerDataResponse responseWithText:status];
}
Dies scheint es behoben zu haben. Vielen Dank! – arlomedia