Я имею дело с некоторой проблемой освобождения и, возможно, сильной или круговой ссылкой, которая не может понять. Я три UIView
с инстанцированием, как показано ниже:Сильные ссылки и проблемы с памятью UIView
Существует один главный ViewController
, который я добавил UIView
внутри него в раскадровке и UIView
имеет weak
выходное отверстие внутри класса, как:
class ViewController : UIViewController {
//MARK: - outlets
@IBOutlet weak var firstView: FirstUiview!
}
второго UIView
является добавлен как подвид на первый взгляд программно нравится:
class FirstUiview : UIView {
//creating an instance of secondUiView
lazy var mySecondView: SecondViewClass = {
let dv = SecondViewClass()
dv.backgroundColor = UIColor.red
return dv
}()
//sometime later by clicking on a button
self.addSubview(mySecondView)
//a button will be tapped to remove mySecondView;
//later will be called at some point upon tapping:
func removingSecondViewByTapping() {
if mySecondView.isDescendant(of: self) {
mySecondView.removeFromSuperview()
}
}
}
Теперь SecondViewClass
:
class SecondViewClass : UIView {
//in this class I create bunch of uiview objects like below:
lazy var aView : UIView = {
let hl = UIView()
hl.tag = 0
hl.backgroundColor = UIColor.lightGray
return hl
}()
self.addSubview(aView) //... this goes on and I add other similar views the same way.
//creating an instance of thirdView
var let thirdView = UIView()
self.addSubview(thirdView)
}
Теперь, если пользователь нажимает на кнопку, чтобы удалить mySecondView
, а затем снова добавить его в другое время (все в том же ViewController
) Я ожидаю, что все подвиды из mySecondView
были освобождены и ушли, но они все там. Я был бы очень признателен, если бы кто-нибудь мог указать мне на него, где я держу сильную ссылку или если есть круговая проблема ссылок? или что-то еще?
Почему вы ожидали бы подвидов 2-го зрения на уйти? Удаление 'mySecondView' из своего супервизора не позволяет удалить все его подпрограммы из себя. – dan
@dan Ой, подождите, я подумал, что view.removeFromSuperview выпустит и уничтожит представление, включая его subviews, если его subviews не ссылаются на что-то, что удерживается, не так ли? если нет, не могли бы вы посоветовать мне, как я могу полностью удалить отправку представления, включая его подзаголовки? – TheeBen