class Test: NSObject {
init(mainView:UIView){
super.init()
var button = UIButton.buttonWithType(UIButtonType.System) as! UIButton
button.setTitle("Test", forState: UIControlState.Normal)
button.backgroundColor = UIColor.whiteColor()
button.frame = CGRectMake(0, 0, 250, 40)
button.addTarget(self, action: "doSomething", forControlEvents: UIControlEvents.TouchUpInside)
mainView.addSubview(button)
}
func doSomething(){
println("test")
}
}
在其他类中,我尝试通过单击此按钮来执行某些操作((,但未成功,我的应用程序崩溃了...
var testvar = Test(view)
如何通过按下按钮来触发此功能而不会发生应用程序崩溃?
这是一个内存管理问题。您的问题是,您存储在局部变量testvar
中的Test
实例将在您离开该方法后释放。UIButton 方法的addTarget
不保留其目标,因此不再有对Test
实例的强引用,它将被解除分配。如果点击该按钮,系统会尝试在现已解除分配的实例上调用doSomething
。这会导致崩溃。
您可以将实例存储在UIViewController的实例变量中(或任何对象调用var testvar =
(。
例如:
class FirstViewController: UIViewController {
var testvar: Test!
override func viewDidLoad() {
super.viewDidLoad()
testvar = Test(mainView:self.view)
}
}