iOS Swift App内存问题 - 运行后从内存中删除功能?

时间:2015-02-26 15:57:48

标签: php ios json xcode swift

第一次提问者......我已经在几所学校安装了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()
       }

2 个答案:

答案 0 :(得分:1)

此视图控制器是否被解雇?如果是这样,您的重复计时器将阻止它被解除分配。 NSTimer保留对其目标的强引用,在您致电invalidate之前,计时器本身不会被释放。

我建议观看WWDC 2013视频Fixing Memory Issues和WWDC 2012视频iOS App Performance: Memory,它们会向您展示使用Instruments识别泄漏,遗弃内存和保留周期的技巧。

答案 1 :(得分:1)

感谢您的建议!在审查了“工具”后,确实是NSURLSession。我添加了

urlSession.finishTasksAndInvalidate() 

在函数的末尾,似乎插入了“漏洞”