From 2fb3263aa18fe7812ccd3a38c4d7d5377c2f3998 Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sun, 9 Aug 2015 18:27:21 +0900 Subject: [PATCH] refactored autoreleasepool calls --- .../BaseDataTransaction+Importing.swift | 18 ++++------ CoreStore/Internal/Functions.swift | 34 +++++++++++++++++++ 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/CoreStore/Importing Data/BaseDataTransaction+Importing.swift b/CoreStore/Importing Data/BaseDataTransaction+Importing.swift index 58d8be2..c8e7326 100644 --- a/CoreStore/Importing Data/BaseDataTransaction+Importing.swift +++ b/CoreStore/Importing Data/BaseDataTransaction+Importing.swift @@ -70,19 +70,17 @@ public extension BaseDataTransaction { "Attempted to import an object of type \(typeName(into.entityClass)) outside the transaction's designated queue." ) - var returnValue: T? - try autoreleasepool { + return try autoreleasepool { if !T.shouldImportFromSource(source) { - return + return nil } let object = self.create(into) try object.didInsertFromImportSource(source) - returnValue = object + return object } - return returnValue } func importUniqueObject( @@ -94,12 +92,11 @@ public extension BaseDataTransaction { "Attempted to import an object of type \(typeName(into.entityClass)) outside the transaction's designated queue." ) - var returnValue: T? - try autoreleasepool { + return try autoreleasepool { if !T.shouldImportFromSource(source) { - return + return nil } let uniqueIDKeyPath = T.uniqueIDKeyPath @@ -109,17 +106,16 @@ public extension BaseDataTransaction { if let object = self.fetchOne(From(T), Where(uniqueIDKeyPath, isEqualTo: uniqueIDValue)) { try object.updateFromImportSource(source) - returnValue = object + return object } else { let object = self.create(into) object.uniqueIDValue = uniqueIDValue try object.didInsertFromImportSource(source) - returnValue = object + return object } } - return returnValue } func importUniqueObjects( diff --git a/CoreStore/Internal/Functions.swift b/CoreStore/Internal/Functions.swift index c221e2e..6fbba1d 100644 --- a/CoreStore/Internal/Functions.swift +++ b/CoreStore/Internal/Functions.swift @@ -25,6 +25,40 @@ import Foundation +internal func autoreleasepool(@noescape closure: () -> T?) -> T? { + + var closureValue: T? + ObjectiveC.autoreleasepool { + + closureValue = closure() + } + + return closureValue +} + +internal func autoreleasepool(@noescape closure: () throws -> T?) throws -> T? { + + var closureValue: T? + var closureError: ErrorType? + ObjectiveC.autoreleasepool { + + do { + + closureValue = try closure() + } + catch { + + closureError = error + } + } + + if let closureError = closureError { + + throw closureError + } + return closureValue +} + internal func autoreleasepool(@noescape closure: () throws -> Void) throws { var closureError: ErrorType?