我有一个执行web服务调用的块的队列。问题是在块结束后下载的数据没有被释放。我读了很多关于保留的内容,但是我无法让ARC去分配内存。如何避免Objective-C中的块保留
下面的代码:
创建块,其下载数据
- (void)syncData { dispatch_semaphore_t sema = dispatch_semaphore_create(0); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0); dispatch_async(queue, ^{ [Model syncAziende:^(id response, NSError *error) { dispatch_semaphore_signal(sema); }]; dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); [Model syncContatti:^(id response, NSError *error) { dispatch_semaphore_signal(sema); }]; dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); [Model syncDestinazioni:^(id response, NSError *error) { dispatch_semaphore_signal(sema); }]; dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); and so on... }); }
在Model.m
+ (void)syncAziende:(RequestFinishBlock)completation { __weak typeof(self)selfObject = self; [selfObject syncData:^(id response, NSError *error) { completation(response,error); } wsEndPoint:kCDCEndPointGetAziende tableName:kCDCDBAziendeTableName]; } + (void)syncContatti:(RequestFinishBlock)completation { __weak typeof(self)selfObject = self; [selfObject syncData:^(id response, NSError *error) { completation(response,error); } wsEndPoint:kCDCEndPointGetContatti tableName:kCDCDBContattiTableName]; } // and so on...
哪里
syncData
是队列:+ (void)syncData:(RequestFinishBlock)completation wsEndPoint:(NSString*) url tableName:(NSString *)table { __weak typeof(self)selfObject = self; [selfObject getDataFromWS:^(id WSresponse, NSError* WSError) { completation(nil,nil); }WSUrl:url]; }
其中
getDataFromWS
是:+ (void)getDataFromWS:(RequestFinishBlock)completation WSUrl:(NSString *)svcUrl { __weak typeof(self)selfObject = self; [selfObject getJsonDataFromURL:^(id response, NSError *error) { completation(response,error); }url:svcUrl]; }
其中是:
+(void)getJsonDataFromURL:(RequestFinishBlock)completation url:(NSString*)url { __weak typeof(self)selfObject = self; __weak AFHTTPRequestOperationManager *manager = [selfObject getAuthorizedRequestionOperationManager]; [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"]; [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [manager.requestSerializer setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; [manager GET:url parameters:nil success:^(AFHTTPRequestOperation *operation, __weak id responseObject) { completation([responseObject objectForKey:@"d"],nil); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { completation(nil,error); }]; }
请将代码粘贴到您的问题中。 https://meta.stackexchange.com/questions/80978/questions-linking-to-external-web-sites-instead-of-showing-code –
尝试使用__block作为下载的数据。 –
@KingMingLin究竟在哪里? – user3463206