Вот как я обычно это делаю.У меня тоже есть одноэлементный объект, используемый для сетевых запросов.Для запросов, которые нужно делать часто, у меня есть NSOperationQueue, который принимает AFHTTPRequestOperations (или AFJSONRequestOperations), поскольку я обычно использую AFNetworking для выполнения запросов.Для них есть свойство завершение и сбой, который выполняется при успешном выполнении или сбое запроса.В моем одноэлементном объекте у меня был бы метод для инициирования конкретного сетевого запроса, и в качестве параметров этого метода я бы включил блок успеха и неудачи, который можно передать в блоки, определенные в методе.Таким образом, все приложение может сделать сетевой запрос, и область приложения в этот момент доступна для одиночного блока в блоке, который передается методу.Например ... (с использованием ARC)
@implementation NetworkManager
-(void)makeRequestWithSuccess:(void(^)(void))successBlock failure:(void(^)(NSError *error))failureBlock
{
NSURL *url = [NSURL URLWithString:@"some URL"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
[responseObject doSomething];
if (successBlock)
dispatch_async(dispatch_get_main_queue(), successBlock);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failureBlock)
dispatch_async(dispatch_get_main_queue(), ^{
failureBlock(error);
});
}];
[self.operationQueue addOperation:op];
}
@end
И вы всегда можете заставить блок успеха принимать любые параметры, которые вам нужно передать.