इसलिए मैं ब्लॉक क्रियाओं को nsmutabledictionary में संग्रहीत कर रहा हूं और फिर उन्हें याद कर रहा हूं जब एक वेबसाईट पर प्रतिक्रिया वापस आती है। यह एक ब्लॉक वाक्यविन्यास में async अनुरोध बदल जाता है। यहां स्ट्रिप डाउन कोड है:nsdictionary में ब्लॉक?
- (void)sendMessage:(NSString*)message responseAction:(void (^)(id))responseAction
{
NSString *correlationID = (NSString*)[[message JSONValue] objectForKey:@"correlationId"];
[self.messageBlocks setObject:responseAction forKey:correlationID];
NSLog(@"Sending message: %@", correlationID);
[webSocket send:message];
}
- (void)webSocket:(SRWebSocket *)wsocket didReceiveMessage:(id)message;
{
NSString *correlationID = (NSString*)[[message JSONValue] objectForKey:@"correlationId"];
NSLog(@"Incoming message. CorrelationID: %@", correlationID);
void (^action)(id) = nil;
if (correlationID) {
action = [messageBlocks objectForKey:correlationID];
if (action) action([message JSONValue]);
[messageBlocks removeObjectForKey:correlationID];
}
}
नोट: सर्वर अनुरोध के साथ भेजे गए सहसंबंधिता के साथ प्रतिक्रिया करता है। तो प्रत्येक प्रतिक्रिया उस आईडी के माध्यम से प्रत्येक अनुरोध से जुड़ा हुआ है।
यह मेरी अपेक्षा से बेहतर, बेहतर काम करता है। मेरे पास सवाल यह है कि क्या इस तरह से ब्लॉक चलाने के लिए सुरक्षित है? कॉल कर रहा है [messageBlocks removeObjectForKey: correlationID]; स्मृति से इसे हटाने के लिए पर्याप्त है। मुझे प्री-एआरसी याद है, block_release एक विकल्प था।