From 3263f06edb9d8d48da7003867fe2accf1e2e4fa8 Mon Sep 17 00:00:00 2001 From: Patrick Hernandez Date: Sat, 14 Apr 2012 15:16:14 -0500 Subject: [PATCH] Fixed a leak of AFHTTPRequestOperation in setCompletionBlock: - Added a block object to reference self in the completion block - Added a pointer to the onceToken to be used in the completion block --- AFNetworking/AFHTTPRequestOperation.m | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/AFNetworking/AFHTTPRequestOperation.m b/AFNetworking/AFHTTPRequestOperation.m index c9f2dad..1b766c2 100644 --- a/AFNetworking/AFHTTPRequestOperation.m +++ b/AFNetworking/AFHTTPRequestOperation.m @@ -203,13 +203,16 @@ static NSString * AFStringFromIndexSet(NSIndexSet *indexSet) { } - (void)setCompletionBlock:(void (^)(void))block { + __block AFHTTPRequestOperation *blockSelf = self; + dispatch_once_t *blockOnceToken = &_onceToken; + [super setCompletionBlock:^{ if(block) { block(); } // Dispatch once is used to ensure that setting the block with this block will not cause multiple calls to 'dispatch_group_leave' - dispatch_once(&_onceToken, ^{ - dispatch_group_leave(self.dispatchGroup); + dispatch_once(blockOnceToken, ^{ + dispatch_group_leave(blockSelf.dispatchGroup); }); }]; }