Я не профессионал, но я боролся с той же проблемой, поэтому вот лучшее, что у меня есть:
@interface MyCallback : NSObject
id target;
SEL action;
id value1;
id value2;
...
@end
Когда мне нужно вызвать что-то, что сообщит мне о завершении, я заполняю заданную цель и действие фактическим обратным вызовом (обычно «self» и метод) и добавляю другие значения, которые мне понадобятся позже, в value1..2..3 Вызываемый объект держится за объект MyCallback, а когда приходит время, он вызывает цель / действие и передает MyCallback в качестве параметра. Вот так я и получаю свое "закрытие".
Чтобы решить другую проблему, вот идея: создайте класс, производный от NSURLConnection, с именем MYURLConenction, и единственным дополнением является поле типа "id", назовите его MyStuff. Затем перейдите к использованию MYURLConenction вместо NSURLConnection - когда вы делаете сетевой запрос, вы можете вставить свои данные (например, экземпляр MyCallback) в MyStuff, и он будет зависеть от них за вас. Поэтому вам не нужно будет создавать новый экземпляр класса обслуживания для каждого вызова.
Хотя на самом деле это не то, как я это делаю - я просто создал универсальный класс-обертку MyHTTPRequest, являющийся делегатом NSURLConnection, он принимает тело URL-адреса и NSString POST, обрабатывает все содержимое сети и возвращает результат NSString и NSErrrrr для вызывающей стороны - чуть более высокая абстракция. Он также хранит MyStuff, так что классы обслуживания могут оставаться одиночными, если они этого хотят.