2016-01-18 28 views
8

Niedawno spędziłem ostatnie 5 godzin próbując usunąć wyciek pamięci w mojej aplikacji Spritekit.Wyciek pamięci dla .showsPhysics

Po uruchomieniu aplikacji zauważyłem niewielką wspinaczkę w moim wykorzystaniu pamięci.

Spędziłem 3 z tych 5 godzin kopania przez materiał odniesienia, poznawania silny VS Słaby z ARC (Zdecydowanie polecam czytania się na tym dla półproduktów takich jak ja)

Czy ktoś doświadcza tego problemu? Jeśli tak, czy istnieje jakieś wyjaśnienie? Oto mały fragment mojego GameViewController:

class GameViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 

    if let scene = MainMenu(fileNamed:"MainMenu") { 
     // Configure the view. 
     let skView = self.view as! SKView 
     skView.showsFPS = true 
     skView.showsNodeCount = true 
     skView.multipleTouchEnabled = true 
     skView.showsPhysics = true 

     /* Sprite Kit applies additional optimizations to improve rendering performance */ 
     skView.ignoresSiblingOrder = true 

     /* Set the scale mode to scale to fit the window */ 
     scene.scaleMode = .Fill 

     //var GameSaveData = GameData() 

     // Scene Config 
     //scene.Landscape = "Test_Landscape" 
     //scene.Area = "Start" 

     skView.presentScene(scene) 
    }else{ 

     print("Couldn't Load Game Scene") 
    } 
} 

Jak widać, nie robię nic nadzwyczajnego tutaj. Chciałbym zamieścić mój kod gry, ale wszystko to zostało zakomentowane w czasie, gdy wciąż obserwowałem wyciek pamięci.

+0

Czy możesz zaktualizować pytanie minimalistycznym kodeksem, który może odtworzyć opisane zachowanie? Czy mówisz, że przeciek ma miejsce nawet w pustym projekcie gry SpriteKit, gdy skView.showsPhysics ma wartość true? – Whirlwind

+0

Witam @Whilwind, zaktualizowałem fragment kodu. Widzę, dokąd zmierzasz. Pomimo komentowania tego, że pokazuje linię fizyczną i nie ma już przecieku pamięci, wciąż obwiniam mój kod. Otworzyłem pusty projekt iz tego co wiem, nie ma wycieku pamięci. To jest po prostu dziwne, ponieważ po komentowaniu wszystkiego, poza kilkoma komentarzami, mój GameViewController jest w zasadzie szablonem Hello World. Być może może to mieć coś wspólnego z moimi ustawieniami kompilacji ... Którego nie sądzę, że kiedykolwiek zmywałem ... – luckybroman5

Odpowiedz

8

W końcu z powodu fustracji zacząłem komentować linie kodu, a następnie budować i profilować, aż do momentu, gdy wyciek pamięci zostanie rozwiązany.

Okazuje się, że w moim pliku GameViewController.swift,

skView.showsPhysics = true 

był winowajcą. To musi być nieco nowego bug skoro, jak nie widziałem tego problemu w < IOS 9,2

+0

haha ​​znalazł to po debugowaniu przez dobrą godzinę. –

3
skView.showsFPS = true 
skView.showsNodeCount = true 
skView.showsPhysics = true 

wydostaną pamięć o co najmniej 0,3 MB/s.

więcej ...

skView.showsFields = true 

enter image description here

Wycieki pamięci z prędkością 30-40 MB/s. Zepsute jabłko!