Подклассы NSURLConnection для хранения данных чисты, меньше кода, чем некоторые другие ответы, более гибки и требуют меньше размышлений об управлении ссылками.
// DataURLConnection.h
#import <Foundation/Foundation.h>
@interface DataURLConnection : NSURLConnection
@property(nonatomic, strong) NSMutableData *data;
@end
// DataURLConnection.m
#import "DataURLConnection.h"
@implementation DataURLConnection
@synthesize data;
@end
Используйте его как NSURLConnection и накапливайте данные в его свойстве data:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
((DataURLConnection *)connection).data = [[NSMutableData alloc] init];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[((DataURLConnection *)connection).data appendData:data];
}
Вот и все.
Если вы хотите пойти дальше, вы можете добавить блок, который будет использоваться в качестве обратного вызова, с помощью еще пары строк кода:
// Add to DataURLConnection.h/.m
@property(nonatomic, copy) void (^onComplete)();
Установите это так:
DataURLConnection *con = [[DataURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
con.onComplete = ^{
[self myMethod:con];
};
[con start];
и вызовите его, когда загрузка закончится следующим образом:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
((DataURLConnection *)connection).onComplete();
}
Вы можете расширить блок для приема параметров или просто передать DataURLConnection в качестве аргумента методу, который нуждается в нем, в блоке no-args, как показано