Итак, я ударил еще один блокпост в моих начинаниях с Swift. Я пытаюсь загрузить несколько изображений в галерею изображений - все работает отлично, за исключением одной вещи. Использование памяти в приложении продолжает расти и возрастать, несмотря на то, что я очищаю изображения. После того, как я пометил в основном весь код, я узнал, что это вызвано загрузкой моего изображения script:
func loadImageWithIndex(index: Int) {
let imageURL = promotions[index].imageURL
let url = NSURL(string: imageURL)!
let urlSession = NSURLSession.sharedSession()
let query = urlSession.downloadTaskWithURL(url, completionHandler: { location, response, error -> Void in
})
query.resume()
}
Как вы можете видеть, этот фрагмент кода практически ничего не делает прямо сейчас. Но каждый раз, когда я его называю, растет использование памяти приложений. Если я закомментирую запрос, использование памяти не меняется.
Я прочитал несколько подобных вопросов, но все они связаны с использованием делегата. Ну, в этом случае делегата нет, но проблема с памятью. Кто-нибудь знает, как устранить его и что его вызывает?
EDIT: Вот полный тестовый класс. Похоже, память растет только тогда, когда изображение может быть загружено, например, указатели на изображение будут храниться в памяти навсегда. Когда изображение не было найдено, ничего не происходит, использование памяти остается низким. Может быть, какой-то намек на то, как очистить эти указатели?
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
//memory usage: approx. 23MB with 1 load according to the debug navigator
//loadImage()
//memory usage approx 130MB with the cycle below according to the debug navigator
for i in 1...50 {
loadImage()
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func loadImage() {
let imageURL = "http://mama-beach.com/mama2/wp-content/uploads/2013/07/photodune-4088822-beauty-beach-and-limestone-rocks-l.jpg" //random image from the internet
let url = NSURL(string: imageURL)!
let urlSession = NSURLSession.sharedSession()
let query = urlSession.downloadTaskWithURL(url, completionHandler: { location, response, error -> Void in
//there is nothing in here
})
query.resume()
}
}
Извините, я понятия не имею, как использовать профайлер еще (будучи очень нубом во всем этом iOS-джазе), по крайней мере, я приложу скриншот профайлера, созданного кодом выше: