Это сообщение моего вопроса раньше, но из-за слишком большого количества изменений, и я упростил свои примеры, я подумал, что было бы яснее, если бы я создал новый вопрос, вместо того чтобы повторно редактировать вопросы несколько раз ,UISwitch не освобождает
ПРОБЛЕМА:
UISwitch
объект как-то не освобождает даже тогда, когда ничего не было сделано с ним.
ПРОЕКТ:
Есть только два вид контроллера. VC1 и VC2. VC1 имеет одну кнопку для подачи VC2. VC2 содержит одну кнопку, чтобы отклонить себя и имущество изготовителя UISwitch
, UILabel
и UIStepper
.
VC1:
class VC1: UIViewController {
let button = UIButton()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(button)
button.addTarget(self, action: #selector(open), for: .touchUpInside)
// Some auto layout (not relevant to the question)
}
func open() { present(VC2(), animated: true) }
}
VC2:
class VC2: UIViewController {
let button = UIButton()
let shifty = CustomSwitch() // Note: nothing has been done with this
let labels = CustomLabels()
let steppy = CustomSteppy()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(button)
button.addTarget(self, action: #selector(close), for: .touchUpInside)
// Some auto layout (not relevant to the question)
}
func close() { dismiss(animated: true) }
}
подклассы:
class CustomSwitch: UISwitch { deinit { print("Switch has been deinitialized") } }
class CustomLabels: UILabel { deinit { print("Labels has been deinitialized") } }
class CustomSteppy: UIStepper { deinit { print("Steppy has been deinitialized") } }
Единственная причина, которую я создал эти подклассов s o Я мог бы легче проследить их в профилировщике. То же самое происходит даже тогда, когда я не подклассы UISwitch
.
EDIT:
Я добавил deinit
к подклассам и как UILabel
, а также UIStepper
показывает сообщение:
Labels has been deinitialized
Steppy has been deinitialized
Так что, кажется, не UISwitch
становятся деинициализируются.
SCREENSHOT:
В этом скриншоте, я открыл и закрыл VC2 несколько раз. Там вы можете видеть только объект CustomSwitch
остался постоянным, а CustomLabels
и CustomSteppy
был освобожден так, как должен быть.
Как было предложено Rmaddy, а также причина, почему я хотел создать новый вопрос является результатом подсчета ссылок. Я следил за некоторыми объяснениями по поводу SO, но я не очень уверен, что делать из этого полностью.
ВОПРОС:
Почему это UISwitch ведет себя, как это и как я могу это исправить?
Вы сделали то, что я предложил по вашему предыдущему вопросу? В качестве напоминания, чтобы проверить флажок «Record Reference Counts» в приложении «Инструменты» и профайл приложения снова. Затем посмотрите, что поддерживало ссылку на каждый коммутатор. – rmaddy
@rmaddy Извините, да, я сделал это, и я забыл добавить эти скриншоты. Я не уверен, что делать из этого, хотя я действительно запутался прямо сейчас. Попытка и поиск, чтобы исправить это, но все еще не повезло. –
Отображает счет как +0. Это означает, что он должен был быть освобожден. Вы тестируете на реальном устройстве или симуляторе? Я не доверяю симулятору для таких вещей. – rmaddy