Uikit: потенциальный цикл удержания между uiinputView и _uiinputViewContentIOS

Программируем под IOS
Ответить
Anonymous
 Uikit: потенциальный цикл удержания между uiinputView и _uiinputViewContent

Сообщение Anonymous »

Я испытываю утечки памяти в моем приложении для iOS, которые, по -видимому, связаны с проблемой между UiinputView и _uiinputViewContent. После использования графа памяти я вижу, что экземпляры этих объектов не имеют правильного сбора. UiinputViewController Subsirews и их функции, но UiinPutView не складывается. В соответствии с количеством TextFields. Однако количество входов продолжает увеличивать ссылки исключительно _uiinputViewContent. < /p>
class KeyboardViewController: UIInputViewController {

// Callbacks
var key1: ((String) -> Void)?
var key2: (() -> Void)?
var key3: (() -> Void)?
var key4: (() -> Void)?

private lazy var buttonTitles = [
["1", "2", "3"],
["4", "5", "6"],
["7", "8", "9"]
]

override func viewDidLoad() {
super.viewDidLoad()
setupKeyboard()
}

lazy var mainStackView: UIStackView = {
let mainStackView = UIStackView()
mainStackView.axis = .vertical
mainStackView.distribution = .fillEqually
mainStackView.spacing = 16
mainStackView.translatesAutoresizingMaskIntoConstraints = false
return mainStackView
}()

private func setupKeyboard() {
let keyboardView = UIView(frame:CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 279.0))

keyboardView.addSubview(mainStackView)

NSLayoutConstraint.activate([
mainStackView.topAnchor.constraint(equalTo: keyboardView.topAnchor, constant: 16),
mainStackView.leadingAnchor.constraint(equalTo: keyboardView.leadingAnchor, constant: 0),
mainStackView.trailingAnchor.constraint(equalTo: keyboardView.trailingAnchor, constant: -24),
mainStackView.bottomAnchor.constraint(equalTo: keyboardView.bottomAnchor, constant: -35)
])

// Create rows
for (_, _) in buttonTitles.enumerated() {
let rowStackView = UIStackView()

rowStackView.axis = .horizontal
rowStackView.distribution = .fillEqually
rowStackView.spacing = 1

// Create buttons for each row
for title in rowTitles {
let button = createButton(title: title)
rowStackView.addArrangedSubview(button)
}

mainStackView.addArrangedSubview(rowStackView)
}
self.view = keyboardView
}

private func createButton(title: String) -> UIButton {
switch title {
///returns a uibutton based on title
}
}

// MARK: - Button Actions
@objc private func numberTapped(_ sender: UIButton) {
if let number = sender.title(for: .normal) {
key1?(number)
}
}

@objc private func key2Called() {
key2?()
}

@objc private func key3Called() {
key3?()
}

@objc private func key4Called() {
key4?()
}

deinit {
// Clear any strong references
key1 = nil
key2 = nil
key3 = nil
key4 = nil

for subview in mainStackView.arrangedSubviews {
if let stackView = subview as? UIStackView {
for button in stackView.arrangedSubviews {
(button as? UIButton)?.removeTarget(self, action: nil, for: .allEvents)
}
}
}
mainStackView.removeFromSuperview()
}
}
< /code>
среда < /p>
ios 16.3
xcode 18.3.1 < /p>
Любое понимание будет высоко оценено, так как это вызывает заметный рост памяти в моем приложении с течением времени. < /p>

Подробнее здесь: https://stackoverflow.com/questions/795 ... iewcontent
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»