     public func unregisterObserver(observer: NSObject) {
         
         let lockQueue = dispatch_queue_create("com.unregisterObserver.queue", nil)
-        dispatch_sync(lockQueue) { [weak self] in
+        dispatch_sync(lockQueue) { [unowned self] in
             let weakLink = WeakLink(target: observer)
-            //FIXIT: =============================
-            self?.observerSet.removeObject(weakLink)
-            // ===================================
+            self.observerSet.removeObject(weakLink)
         }
     }
    
     public func notifyObserversWithSelector(selector: Selector, andObject object: AnyObject?) {
         
         let lockQueue = dispatch_queue_create("com.unregisterObserver.queue", nil)
-        dispatch_sync(lockQueue) { [weak self] in
-            for object in self!.observerSet {
+        dispatch_sync(lockQueue) { [unowned self] in
+            for object in self.observerSet {
                 let weakLink = object as! WeakLink
                 if let isResponse = weakLink.target?.respondsToSelector(selector) {
                     if isResponse {

    public func notifyObserversInMainThreadWithSelector(selector: Selector, andObject object: AnyObject?) {
        
        let lockQueue = dispatch_queue_create("com.unregisterObserver.queue", nil)
        dispatch_sync(lockQueue) { [weak self] in
            for object in self!.observerSet {
                let weakLink = object as! WeakLink
                if let isResponse = weakLink.target?.respondsToSelector(selector) {
                    if isResponse {

    public func registerObserver(observer: NSObject) {
        
        let lockQueue = dispatch_queue_create("com.registerObserver.queue", nil)
        
        dispatch_sync(lockQueue) { [unowned self] in
            let weakLink = WeakLink(target: observer)
            self.observerSet.addObject(weakLink)
        }
        
    }
