     
     public extension UIControl {
         
+        private struct AssociatedKeys {
+            static var targetClosure = "targetClosure"
+        }
+        
         public func setAction(controlEvents: UIControlEvents, action: ((_ sender: Any) -> Void)?) {
             if let action = action {
                 self.removeTarget(self, action: nil, for: controlEvents)
-                self.addTarget(self, action: #selector(UIControl.performAction), for: controlEvents)
+                self.addTarget(self, action: #selector(performAction), for: controlEvents)
                 self.closuresWrapper = ClosureWrapper(action: action)
             } else {
                 self.removeTarget(self, action: nil, for: controlEvents)

        }
        
        fileprivate var closuresWrapper: ClosureWrapper? {
            get { return objc_getAssociatedObject(self, &_aaak) as? ClosureWrapper }
            set { objc_setAssociatedObject(self, &_aaak, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) }
        }
        
    }

    public extension UIBarButtonItem {
        
        public convenience init(barButtonSystemItem systemItem: UIBarButtonSystemItem, action: ((_ sender: Any) -> Void)?) {
            self.init(barButtonSystemItem: systemItem, target: nil, action: #selector(performAction))
            if let action = action {
                self.closuresWrapper = ClosureWrapper(action: action)
                self.target = self
