Как обнаружить и отладить циклы сильных ссылок в Swift?

В простых случаях это столь же тривиально, как пристальный взгляд на несколько строк кода:

class A {
    var b: B?
}

class B {
  var a: A?
}

var a = A()
var b = B()
a.b = b
b.a = a

Как решить эту проблему для проекта> 50 тыс. Строк кода (перенос с Objective-C / C ++). Например, есть ли способ разработать инструмент для обхода графа объекта во время выполнения (как это делается в мирах Java / C #)?


person Alfa07    schedule 05.06.2014    source источник
comment
Та же проблема уже применима к исходному Objective-C, если это ARC. Помните об этом при поиске решений. Доступно еще много ресурсов по Objective-C. :)   -  person nschum    schedule 05.06.2014


Ответы (1)


Вместо реализации обхода графа объектов вы можете обнаруживать сильные ссылочные циклы с помощью инструментов: он выявляет утечки памяти и может графически отображать циклы (Документация по инструментам Apple)

Вы должны заменить каждое объектное свойство C weak на переменную weak instance в Swift.

    class B {
      weak var a: A?
    }

и если вы можете быть уверены, что он никогда не принимает в качестве значения nil, вы можете префикс unowned

    class B {
      unowned var a: A
    }

тогда вы могли бы получить доступ к свойству без принудительного развертывания переменной с помощью!

Это может быть больше, если ваш код Objective-C использует атрибуты @properties, которые были нормой до дуги

person Gael    schedule 05.06.2014
comment
Спасибо за ссылку на инструменты! Проверяю, работает ли он со Swift - person Alfa07; 05.06.2014