没有write init方法,不能在diffrent类中调用方法

时间:2016-12-08 07:22:17

标签: ios objective-c iphone swift init

我无法从其他课程中拨打handleRegister方法。

我创建了一个名为A的类,其中包含handleRegister方法:

class A {
   static var a:A?
   init(){
      A.a = self
   }

   @objc func handleRegister(){
      print("Hello method1")
   }
}

ViewController我来自handleRegister方法的课程:

class ViewController: UIViewController {

    @IBOutlet weak private var btnFirst :UIButton?

    override func viewDidLoad() {
       super.viewDidLoad()
       // Do any additional setup after loading the view, typically from a nib.
       let obj = A()
       btnFirst?.addTarget(obj, action: #selector(obj.handleRegister), for: UIControlEvents.touchUpInside)
    }

    override func didReceiveMemoryWarning() {
       super.didReceiveMemoryWarning()
       // Dispose of any resources that can be recreated.
    }
}

在我的ViewController课程中我btnFirst我正在尝试为btnFirst添加目标,并尝试调用handleRegister形式为class A的方法工作正常。

  

但我的问题是,当我在A类中评论init方法时,我无法调用方法handleRegister

     

任何人都可以告诉我为什么init方法对于添加另一个类的按钮目标很重要

1 个答案:

答案 0 :(得分:2)

您正在A中创建viewDidLoad类对象,该对象将在viewDidLoad之后立即取消分配。在A类初始化程序中,您通过编写此A.a = self来创建A的强引用(这就是调用按钮操作的原因)。只需在A之外创建viewDidLoad类对象,它就可以正常工作。