我想创建简单的对象助手,以便在我的 Swift 2.0 应用程序的许多地方发送短信,并在下一步中创建另一个助手(电子邮件、pdf 打开器等)
我创建简单的类:
import Foundation
import MessageUI
class SmsHelper: MFMessageComposeViewControllerDelegate {
func sendSMS(body: String){
if (MFMessageComposeViewController.canSendText()){
let messageVC = MFMessageComposeViewController()
messageVC.body = body
//messageVC.recipients = ["Enter tel-nr"]
messageVC.messageComposeDelegate = self;
AppDelegate().sharedInstance().getTopController().presentViewController(messageVC, animated: false, completion: nil)
}
else{
//do some alert etc.
}
}
func messageComposeViewController(controller: MFMessageComposeViewController, didFinishWithResult result: MessageComposeResult){
sendSMSRsp(result, errorMsg: nil)
controller.dismissViewControllerAnimated(true, completion: nil)
print("sms didFinishWithResult")
}
}
在代码中的任何地方我想这样做:
class someAnotherClass{
func someFunction(){
let smsHelper = SmsHelper()
smsHelper.sendSms("some text")
}
}
所以打开了短信 ios 编辑器,但是当我想关闭它或发送时,它不会关闭,messageComposeViewController(controller: MFMessageComposeViewController, didFinishWithResult result: MessageComposeResult)
我从未调用过的函数并且应用程序因内存泄漏而崩溃,我知道原因:是因为 'someFunction' 中的 SmsHelper 对象在结束后被删除此函数的作用域,并且此对象为 nil,系统尝试在 nil 对象处调用 didFinishWithResult。我确认:当我将 smsHelper 对象添加为“SomeClass”的成员时,它起作用了 - 调用了委托。
问题是:这样做的最佳实践是什么,添加成员对我来说不是一个选项,因为许多类都可以使用它,而且创建一个单例,appDelegate 成员我认为是很愚蠢的。如何在作用域函数结束时强制不删除对象?