diff options
author | Sebastian Schmidt <mrschmidt@google.com> | 2017-06-15 09:43:31 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-15 09:43:31 -0700 |
commit | 5cb9446fab0606b0ea6a49dcda50fb6bb6e5bbd4 (patch) | |
tree | c4aa472320bfb041540c5a865255b968b88016b4 /Firebase/Storage/FIRStorageUploadTask.m | |
parent | c47a19dcf4fd341dbb290f0135b1aa9feda85da5 (diff) |
Calling stopFetching on GTMSessionFetcher to stop callbacks from bein… (#81)
* Calling stopFetching on GTMSeesionFetcher to stop callbacks from being called after deallocation.
Also fixing retain cycles in all task classes.
* Addressing build warnings
* Adjusting indentation
Diffstat (limited to 'Firebase/Storage/FIRStorageUploadTask.m')
-rw-r--r-- | Firebase/Storage/FIRStorageUploadTask.m | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/Firebase/Storage/FIRStorageUploadTask.m b/Firebase/Storage/FIRStorageUploadTask.m index 74741b0..f9f6275 100644 --- a/Firebase/Storage/FIRStorageUploadTask.m +++ b/Firebase/Storage/FIRStorageUploadTask.m @@ -25,6 +25,7 @@ @implementation FIRStorageUploadTask @synthesize progress = _progress; +@synthesize fetcherCompletion = _fetcherCompletion; - (instancetype)initWithReference:(FIRStorageReference *)reference fetcherService:(GTMSessionFetcherService *)service @@ -62,6 +63,10 @@ return self; } +- (void) dealloc { + [_uploadFetcher stopFetching]; +} + - (void)enqueue { NSAssert([NSThread isMainThread], @"Upload attempting to execute on non main queue! Please only " @"execute this method on the main queue."); @@ -103,23 +108,28 @@ } uploadFetcher.maxRetryInterval = self.reference.storage.maxUploadRetryTime; + + __weak FIRStorageUploadTask* weakSelf = self; [uploadFetcher setSendProgressBlock:^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) { - self.state = FIRStorageTaskStateProgress; - self.progress.completedUnitCount = totalBytesSent; - self.progress.totalUnitCount = totalBytesExpectedToSend; - self.metadata = _uploadMetadata; - [self fireHandlersForStatus:FIRStorageTaskStatusProgress snapshot:self.snapshot]; - self.state = FIRStorageTaskStateRunning; + weakSelf.state = FIRStorageTaskStateProgress; + weakSelf.progress.completedUnitCount = totalBytesSent; + weakSelf.progress.totalUnitCount = totalBytesExpectedToSend; + weakSelf.metadata = _uploadMetadata; + [weakSelf fireHandlersForStatus:FIRStorageTaskStatusProgress snapshot:weakSelf.snapshot]; + weakSelf.state = FIRStorageTaskStateRunning; }]; _uploadFetcher = uploadFetcher; // Process fetches self.state = FIRStorageTaskStateRunning; - [_uploadFetcher beginFetchWithCompletionHandler:^(NSData *_Nullable data, - NSError *_Nullable error) { + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-retain-cycles" + _fetcherCompletion = ^(NSData *_Nullable data, + NSError *_Nullable error) { // Fire last progress updates [self fireHandlersForStatus:FIRStorageTaskStatusProgress snapshot:self.snapshot]; @@ -130,6 +140,7 @@ self.metadata = _uploadMetadata; [self fireHandlersForStatus:FIRStorageTaskStatusFailure snapshot:self.snapshot]; [self removeAllObservers]; + _fetcherCompletion = nil; return; } @@ -156,6 +167,13 @@ [self fireHandlersForStatus:FIRStorageTaskStatusSuccess snapshot:self.snapshot]; [self removeAllObservers]; + _fetcherCompletion = nil; + }; +#pragma clang diagnostic pop + + [_uploadFetcher beginFetchWithCompletionHandler:^(NSData *_Nullable data, + NSError *_Nullable error) { + weakSelf.fetcherCompletion(data, error); }]; } |