【发布时间】:2015-02-26 15:57:47
【问题描述】:
第一次提问...我在几所学校安装了一个 iPad Kiosk 模式应用程序。他们有间歇性的互联网问题,而不是应用程序没有响应,我构建了一些代码来检查服务器是否真的可以访问。我尝试了 Reachability.swift 和 Apple 的 Reachability 文件,我也实现了这些文件,但它们并没有走得足够远,无法真正查看互联网连接是否正常......
我的问题是每次代码到达服务器时,都会给内存增加一些开销,最终,内存会填满。我想在函数运行后删除开销,但我似乎找不到如何去做。任何帮助,将不胜感激!
该函数连接到我的服务器,如果应用程序在 5 秒后无法连接,它会计时并抛出错误并显示警报,如果它连接,它什么也不做(除了吃掉一些内存)。服务器上的连接文件是 PHP 并且只包含一个 header
<?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()
}
【问题讨论】:
-
每当您遇到内存问题并且不确定如何继续时,我建议您使用 Instruments。不过,我不确定 Instruments 与 Swift 的配合情况如何,因此请谨慎操作。