問題タブ [strong-references]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - クロージャによるプロパティの初期化
私はARCと強い参照サイクルを調べていて、私のこのコードに出くわしました:
self
クロージャー内のメソッドでの参照addTarget
は、強い参照サイクルを作成していないようです。
誰かが理由を説明できますか?
UIView
また、コンパイラから継承を削除すると、不平を言い始めることに気付きました: Use of unresolved identifier 'self'
.
誰かがこれも説明できますか?なぜこの場合に発生し、最初のケースでは発生しないのですか?
swift - 強力な参照サイクルを引き起こす NotificationCenter - Swift 5
NotificationCenter を使用すると、強い参照サイクルが発生しているようです。
デバイスの回転を観察するために NotificationCenter を使用しています。(これはデバイスの回転を決定する最良の方法ではないと主張する人もいますが、自動レイアウトが使用されておらず、ストーリーボードも使用されていないため、現在これが私の唯一のルートのようです)。
deinit {}
とViewController
でオブザーバーを削除しても、 が呼び出されることはありません。viewWillDisappear
viewDidDisappear
なぜこれが発生しているのか、どのように解決するのかについてのアイデアはありますか?
また、他の方法で回転検出を決定する方法についての新しいアイデアにもオープンです (ただし、自動レイアウトやストーリーボードは使用されていません)。
以前TestVC()
に使用 した場所に到達するには を使用し、戻るには を使用します。self.navigationController?.pushViewController(TestVC(), animated: true)
ViewController
pop
プレゼントがなければ、Observer
クラスは正しくなりdeinit
ます。
解決済み
下にマークされた回答のおかげで、強力な参照サイクルが削除されました。
交換するだけNotificationCenter.default.addObserver(forName: UIDevice.orientationDidChangeNotification, object: nil, queue: .main, using: rotationDetected)
と
NotificationCenter.default.addObserver(self, selector: #selector(rotationDetected), name: UIDevice.orientationDidChangeNotification, object: nil)