 	}
 
 	/// Invoke notification handler on main thread asynchronously.
-	func _invokeHandlerOnMainThread(notification:NotificationProtocol) {
-		
+	func _invokeHandlerOnMainThread(owner: AnyObject, _ notification:NotificationProtocol) {
+		
+		func _invoke(owner: AnyObject, _ notification:NotificationProtocol) {
+			
+			self.handler(notification)
+		}
+
 		invokeAsyncOnMainQueue {
 			
-			self.handler(notification)
+			/// keep `owner` until finish invoking on main thread.
+			_invoke(owner, notification)
 		}
 	}
 }

		switch self.target {
			
		case notification.dynamicType, AnyNotification.self:
			self._invokeHandlerOnMainThread(notification)
			
		default:
			break

	/// Invoke notification handler. If the `notification` type is not same type as self.target, do nothing.
	func invoke(notification:NotificationProtocol) {

		// Keep self.owner until finished invoke handler.
		guard let owner = self.owner else {
			
			return
		}
