Ver Fonte

[Issue #1551] Fixed retain cycle when using Validation clsoures.

Previously, validation closures were executed on the Request’s operation queue and required `self` to be captured. Now that the `Request` holds the validation closure references in an internal array, it’s necessary to mark them as unowned.
Christian Noon há 9 anos atrás
pai
commit
32b0ae9c9b
1 ficheiros alterados com 6 adições e 6 exclusões
  1. 6 6
      Source/Validation.swift

+ 6 - 6
Source/Validation.swift

@@ -162,7 +162,7 @@ extension DataRequest {
     /// - returns: The request.
     @discardableResult
     public func validate(_ validation: @escaping Validation) -> Self {
-        let validationExecution: () -> Void = {
+        let validationExecution: () -> Void = { [unowned self] in
             if
                 let response = self.response,
                 self.delegate.error == nil,
@@ -186,7 +186,7 @@ extension DataRequest {
     /// - returns: The request.
     @discardableResult
     public func validate<S: Sequence>(statusCode acceptableStatusCodes: S) -> Self where S.Iterator.Element == Int {
-        return validate { _, response, _ in
+        return validate { [unowned self] _, response, _ in
             return self.validate(statusCode: acceptableStatusCodes, response: response)
         }
     }
@@ -200,7 +200,7 @@ extension DataRequest {
     /// - returns: The request.
     @discardableResult
     public func validate<S: Sequence>(contentType acceptableContentTypes: S) -> Self where S.Iterator.Element == String {
-        return validate { _, response, data in
+        return validate { [unowned self] _, response, data in
             return self.validate(contentType: acceptableContentTypes, response: response, data: data)
         }
     }
@@ -238,7 +238,7 @@ extension DownloadRequest {
     /// - returns: The request.
     @discardableResult
     public func validate(_ validation: @escaping Validation) -> Self {
-        let validationExecution: () -> Void = {
+        let validationExecution: () -> Void = { [unowned self] in
             let request = self.request
             let temporaryURL = self.downloadDelegate.temporaryURL
             let destinationURL = self.downloadDelegate.destinationURL
@@ -266,7 +266,7 @@ extension DownloadRequest {
     /// - returns: The request.
     @discardableResult
     public func validate<S: Sequence>(statusCode acceptableStatusCodes: S) -> Self where S.Iterator.Element == Int {
-        return validate { _, response, _, _ in
+        return validate { [unowned self] _, response, _, _ in
             return self.validate(statusCode: acceptableStatusCodes, response: response)
         }
     }
@@ -280,7 +280,7 @@ extension DownloadRequest {
     /// - returns: The request.
     @discardableResult
     public func validate<S: Sequence>(contentType acceptableContentTypes: S) -> Self where S.Iterator.Element == String {
-        return validate { _, response, _, _ in
+        return validate { [unowned self] _, response, _, _ in
             let fileURL = self.downloadDelegate.fileURL
 
             guard let validFileURL = fileURL else {