Visual Memory Debugging z Xcode 8, czyli zarządzanie pamięcią

Visual Memory Debugging z Xcode 8, czyli zarządzanie pamięcią

Istnieją narzędzia, które bardzo pomagają nam w zarządzaniu pamięcią podczas tworzenia aplikacji. Dzięki temu większość programistów rzadko spotyka się problemami z pamięcią (albo po prostu o nich nie wie). Raz na jakiś czas jednak musimy zmierzyć się z jakimś wyciekiem pamięci. Co wtedy robimy? Najbardziej powszechną metodą jest włączenie narzędzia Instruments i debugowanie problemu, co często jest dość mozolne. Apple wraz z wydaniem nowego Xcode’a 8 wprowadził nowe narzędzie, które znacznie nam to ułatwia – Visual Memory Debugger.

Tworzenie wycieku

Stworzymy prosty wyciek pamięci, by przetestować nowe narzędzie w praktyce. Najpierw tworzymy prostą klasę, której obiekt może trzymać referencję do innego obiektu tej samej klasy:

class LeakObject {
    var other: LeakObject?
}

Następnie tworzymy równie prosty view controller. Będzie on trzymał referencję do obiektu klasy LeakObject. W metodzie viewDidLoad() stworzymy drugi obiekt tej samej klasy i wzajemnie je połączymy.

class MemoryLeakViewController: UIViewController {
    
    @IBOutlet weak var button: UIButton!
    
    let firstObject = LeakObject()
    
    override func viewDidLoad() {
        super.viewDidLoad()


        let secondObject = LeakObject()
        
        firstObject.other = secondObject
        secondObject.other = firstObject
    }


    @IBAction func buttonAction(_ sender: AnyObject) {
        if let navVC = navigationController {
            navVC.popViewController(animated: true)
        }
    }


}

Dla ułatwienia stworzyłem przycisk, który usunie nasz view controller ze stosu nawigacyjnego. Każdy prawdopodobnie domyśla się co powinno się wówczas stać. Dzięki wzajemnej, silnej referencji obiektów klasy LeakObject pozostaną one w pamięci i powstanie wyciek. Przejdźmy więc do debugowania!

Visual Memory Debugger

Ikonka uruchamiająca debuggera pamięci znajduje się na prawo od ikonki debuggera widoków, z którego wszyscy programiści iOS dość powszechnie korzystają.

Visual Memory Debugger icon on the panel

Debugger przerywa wykonanie aplikacji i pokazuje nam wizualizację użycia pamięci. Tak jak podejrzewaliśmy, po usunięciu view controllera powstał wyciek, o którym debugger skrupulatnie nas poinformował.

Memory Leak view

Główny ekran pokazuje wizualizację tych obiektów oraz ich relacji.

LeakObject diagram

Po naciśnięciu na konkretny obiekt otrzymujemy szczegółowe informacje na jego temat.

Detailed data about the leakObject

Co więcej, Xcode poinformował nas w czasie działania programu o wycieku.

Debugger in Xcode

Po naciśnięciu na fioletową ikonkę, dostajemy szczegółowe dane na jego temat.

Detailed data about the leak - view from Xcode

Na potrzeby artykułu został stworzony prosty wyciek pamięci, który został skrzętnie wyłapany przez Xcode i zwizualizowany przez nowy debugger pamięci. Narzędzie to z pewnością przyda nam się bardziej przy skomplikowanych problemach i w większych projektach. Nowy debugger jest intuicyjny i łatwy w użyciu. Zachęcam do wykorzystania go przy najbliższej możliwej okazji. Więcej informacji znajdziecie na prezentacji Apple z czerwcowego WWDC.

 

 

Dowiedz się więcej

Wycena projektu

Opowiedz nam o swoim projekcie i napisz, jak możemy Ci pomóc.

Dlaczego warto rozwijać z nami projekty?

Logo Mobile Trends Awards

Mobile Trends Awards 2021

Wygrana w kategorii
ŻYCIE CODZIENNE

Nagroda Legalnych Bukmacherów

Nagroda Legalnych Bukmacherów 2019

Najlepsza aplikacja mobilna

Mobile Trends Awards logo

Mobile Trends Awards 2023

Wygrana w kategorii
MCOMMERCE ROZWÓJ

23

opinie klientów

Clutch logo