第一次提问者......我已经在几所学校安装了iPad Kiosk模式应用程序。他们有间歇性的互联网问题,而不是应用程序没有响应我构建了一些代码,检查服务器是否实际可访问。我尝试了Reachability.swift和Apple的Reachability文件,我也已经实现了这些文件,但它们还不够远,实际上看看互联网连接是否正常......
我的问题是每次代码到达服务器时,都会给内存增加一些开销,最终内存会填满。我希望在函数运行后删除开销,但我似乎无法找到如何做到这一点。任何帮助,将不胜感激!
该功能连接到我的服务器,如果应用程序在5秒后无法连接,并且发出错误并显示警报,如果连接,它什么都不做(除了吃掉一些内存)。服务器上的连接文件是PHP,只包含一个标题
<?PHP header("Content-Type: application/json; charset=UTF-8"); ?>
这是我的代码:
我从viewDidLoad调用该函数:
override func viewDidLoad() {
super.viewDidLoad()
weak var testConnectionTimer = NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: Selector("testConnection"), userInfo: nil, repeats: true)
//WebView UI Here}
//The testing Function
func testConnection(){
var connected = 0
let urlAsString = "https://www.myserver.com/app/online.php"
let url = NSURL(string: urlAsString)!
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.timeoutIntervalForRequest = 5.0
let urlSession = NSURLSession(configuration: configuration)
let jsonQuery = urlSession.dataTaskWithURL(url, completionHandler: { data, response, error -> Void in
if (error != nil) {
}
if (error == nil) {
connected = (connected + 1)
}
if (connected != 1)
{
var alertController = UIAlertController(title: "MySystem", message: "Can't Connect to Server. Please Verify Internet Connection and Try Again", preferredStyle: .Alert)
var okAction = UIAlertAction(title: "Try Again", style: UIAlertActionStyle.Default) {
UIAlertAction in
self.ActivityMonitor.startAnimating()
NSLog("Try Again")
self.WebView.reload()
let isDisplayed = 0
}
var cancelAction = UIAlertAction(title: "Exit App", style: UIAlertActionStyle.Cancel) {
UIAlertAction in
NSLog("App Exited")
exit(1)
}
alertController.addAction(okAction)
alertController.addAction(cancelAction)
self.presentViewController(alertController, animated: true, completion: nil)
}
})
jsonQuery.resume()
}
答案 0 :(得分:1)
此视图控制器是否被解雇?如果是这样,您的重复计时器将阻止它被解除分配。 NSTimer
保留对其目标的强引用,在您致电invalidate
之前,计时器本身不会被释放。
我建议观看WWDC 2013视频Fixing Memory Issues和WWDC 2012视频iOS App Performance: Memory,它们会向您展示使用Instruments识别泄漏,遗弃内存和保留周期的技巧。
答案 1 :(得分:1)
感谢您的建议!在审查了“工具”后,确实是NSURLSession。我添加了
urlSession.finishTasksAndInvalidate()
在函数的末尾,似乎插入了“漏洞”