2016-09-30 13 views
1

これは私の質問の再投稿ですが、あまりにも多くの編集のために私は例を簡略化していますので、質問を何度も再編集するのではなく、 。UISwitchが割り当て解除されていない

問題:
UISwitchオブジェクトは何とか何がそれで行われていない場合でも、割り当てを解除しません。


プロジェクト:
2つだけのビューコントローラがあります。 VC1およびVC2。 VC1にはVC2を表示するボタンが1つあります。 VC2には、それ自身を却下するボタンと、カスタムのプロパティであるUISwitchUILabelUIStepperが含まれています。

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が取得されていないようです初期化されていない。

スクリーンショット:
このスクリーンショットでは、私が開かれ、VC2を複数回閉じました。そこには、オブジェクトCustomSwitchだけが永続的な状態を保っているのが見えますが、CustomLabelsCustomSteppyは、そうでなければならないように割り当てられています。

Original state

Rmaddyによって提案されたとも私は新しい質問を作成したい理由は、参照カウントの結果であるとして。私はSOに関するいくつかの説明に従ってきましたが、私は完全にそれをどうするのかについてはあまりよく分かりません。

Reference counts (collapsed)

Reference counts


QUESTION:
なぜこのUISwitchはこのように動作していると私はこれをどのように修正することができますか?

+0

あなたは以前の質問で提案したことをしましたか?覚えていることは、Instrumentsの「Reference Reference Count」チェックボックスをチェックして、アプリを再度プロファイルすることでした。それから各スイッチへの参照を維持していたものを見てください。 – rmaddy

+0

@rmaddy申し訳ありません、私はそれをやったし、それらのスクリーンショットを追加することを忘れました。私は本当に今混乱しているので、私はそれを作ることが何であるか分からない。それを修正しようと努力しているがまだ運がまだありません。 –

+0

これは、カウントが+0であることを示しています。つまり、割り当てが解除されているはずです。実際のデバイスやシミュレータでテストしていますか?私はこれらの種類のシミュレータを信頼しません。 – rmaddy

答えて

0

これは(最終的に)iOS 10.2で修正されました

関連する問題