2016-11-07 1 views
1

Я недавно испытывал утечку памяти при профилировании инструментами.Утечка памяти при подклассификации пользовательского UIViewController

Итак, у меня есть родительский AVC, который наследуется от UIViewController и подкласса AVC, называемого BVC. этот BVC имеет экземпляр класса-помощника, который инициализируется в viewDidLoad. Ну, инструменты утверждают, что есть утечка памяти на viewDidLoad.

Instruments output

Вот пример кода, я использовал, чтобы воспроизвести проблему. Странно, если «a» является членом AVC и инициализируется в BVC «A», он не течет.

import UIKit 

class A 
{ 
} 

class AVC: UIViewController 
{ 
    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
    } 
} 

class BVC: AVC 
{ 
    var a: A! 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     a = A() 
    } 
} 

Таким образом, вопрос, почему «а» утечки, когда он является экземпляром BVC и не AVC? Кроме того, в обоих случаях выполняется захват графика памяти.

Memory graph

Благодаря

ответ

0

Вы должны объявить, как

var a: A? 

никогда не использовали принудительный развязывание. Опциями

+0

Это совсем не так и не отвечает на вопрос. Более того, в моем фактическом приложении «a» никогда не должно быть nil, и я не могу его инициализировать непосредственно в той же строке, что и объявлено, поэтому элегантным решением является принудительное разворот, это одно из фактических применений развертывания силы. –