refactored autoreleasepool calls

This commit is contained in:
John Rommel Estropia
2015-08-09 18:27:21 +09:00
parent 64aa97264e
commit 2fb3263aa1
2 changed files with 41 additions and 11 deletions

View File

@@ -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<T where T: NSManagedObject, T: ImportableUniqueObject>(
@@ -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<T where T: NSManagedObject, T: ImportableUniqueObject>(

View File

@@ -25,6 +25,40 @@
import Foundation
internal func autoreleasepool<T>(@noescape closure: () -> T?) -> T? {
var closureValue: T?
ObjectiveC.autoreleasepool {
closureValue = closure()
}
return closureValue
}
internal func autoreleasepool<T>(@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?