This commit is contained in:
John Rommel Estropia
2015-02-21 21:14:19 +09:00
parent 23f09fe5a6
commit 061a863235
21 changed files with 248 additions and 258 deletions

View File

@@ -26,13 +26,36 @@
import Foundation
private class WeakObject {
private(set) weak var object: AnyObject?
init(_ object: AnyObject) {
self.object = object
}
}
// MARK: - NSObject+HardcoreData
internal extension NSObject {
// MARK: Internal
internal func getAssociatedObjectForKey<T: AnyObject>(key: UnsafePointer<Void>) -> T? {
return objc_getAssociatedObject(self, key) as? T
switch objc_getAssociatedObject(self, key) {
case let object as T:
return object
case let object as WeakObject:
return object.object as? T
default:
return nil
}
}
internal func setAssociatedRetainedObject<T: AnyObject>(object: T?, forKey key: UnsafePointer<Void>) {
@@ -49,4 +72,16 @@ internal extension NSObject {
objc_setAssociatedObject(self, key, object, UInt(OBJC_ASSOCIATION_ASSIGN))
}
internal func setAssociatedWeakObject<T: AnyObject>(object: T?, forKey key: UnsafePointer<Void>) {
if let object = object {
objc_setAssociatedObject(self, key, WeakObject(object), UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
}
else {
objc_setAssociatedObject(self, key, nil, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
}
}
}