さまざまな意味で「存在」が意味する意味を明確にする必要があります。
この場合、オブジェクトのretainCountがあなたの存在の定義を満たしていることがあります。 Objective-Cのメモリ管理に精通していない場合は、オブジェクトのretainCountが0になると、割り当てが解除され、通常は存在しなくなることを認識してください。
if ([lbl_timer retainCount] >= 1) {
// The object is owned/retained by at least one thing,
// assuming a parentview is an owner
[lbl_timer removeFromSuperview];
} else {
// The object isn't retained by anyone
}
これは正直にチェックするために最も信頼性の高いまたは "安全な" 方法ではありません。
編集:解除されたオブジェクトのretainCountを呼び出すとクラッシュするという問題が発生しました。この種のチェックを避けるのが最善の方法です。以下の方法でくっつくことはずっと安全です。
親ビューがないため具体的にクラッシュすることがわかっている場合は、親ビューがあるかどうかを確認できます。
さらに
if ([lbl_timer superview] != nil) {
[lbl_timer removeFromSuperView];
}
:それもlbl_timerが最初に出nil'dされていないことを確認する方が安全かもしれません。
if (lbl_timer != nil) {
if ([lbl_timer superview] != nil) {
[lbl_timer removeFromSuperView];
}
}
あなたの返事をありがとう。 親のビューがありましたが、既に削除されているかどうかを知りたかったので、2回目の削除でクラッシュしていました。私は別のグローバル変数を変更していましたが、それをフラグとして使用しました。それは緊急だったからです。 私はメモリ管理を見ていきます.'nil 'は私のための新しいアイデアでした。もう一度ありがとうございます – pMan
特にメモリが再利用された場合は、すでに割り当て解除されたオブジェクトに対して 'retainCount'を呼び出すことができるかどうかは不明です。 – notnoop
ああ、良い点。私はそれをテストしなければならないだろうが、それはクラッシュを引き起こすかもしれない。オブジェクトが最初に除外されていないことを確認するためにテストするほうが安全でしょう。 – Neil