2012-02-23 4 views
1

変数がゾンビのときにチェックしたいと思います&そうでないときは、実際に存在すればyがスーパーレイヤーから削除されなければならない、これは既に削除されていますが、ゾンビであるこの時点でクラッシュしています。実行時に変数がゾンビであるかどうかを確認するにはどうすればよいですか?変数がゾンビであるかどうか

if (avPlayerLayer) { 
     [avPlayerLayer removeFromSuperlayer]; 
} 

私はそれを作成するには、このコードを持っている:

if (!avPlayer) { 
     avPlayer = [[AVPlayer alloc] initWithURL:movieURL]; 
    } else { 
     [avPlayer replaceCurrentItemWithPlayerItem:[AVPlayerItem playerItemWithURL:movieURL]]; 
     avPlayer.rate = 0.0f; 
    } 
} 
avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer]; 

は私の代わりにこれ?:

if (!avPlayer) { 
     avPlayer = [[AVPlayer alloc] initWithURL:movieURL]; 
    } else { 
     avPlayer = nil; 
     avPlayer = [[AVPlayer alloc] initWithURL:movieURL]; 
     avPlayer.rate = 0.0f; 
    } 
} 
avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer]; 

すべてのヘルプのような何かをするべきか?前もって感謝します!

+0

最初にゾンビを持ってはいけません。そのような状況が必要な場合は、ARCと弱を使用してください。 –

+0

リチャードに感謝します。しかし、私は今、プロジェクト全体を変更したくないです。次回はそれを考慮してください。 – Oscar

答えて

1

代わりに、変数をnilに設定して、nilをチェックしないでください。あなたがあなたの最初の実装では、単純な矛盾を持っているようだ

+1

スーパーレイヤーが削除されたときに問題が発生すると思います。 –

+0

あなたは右のオスカーだったので、私はavPlayerLayer = nilを置きました。 after [avPlayerLayer removeFromSuperlayer]; &もう一度クラッシュしなかった – Oscar

0

---

if (!avPlayer) { 

    // This sets avPlayer to a retained object reference (retainCount==1) 
    avPlayer = [[AVPlayer alloc] initWithURL:movieURL]; 
} else { 
    // This sets avPlayer to an autoReleased object reference 
    // which will die as soon as the memory pool is drained next. 
    // You should have retained it before setting, and your problem will be gone. 
    [avPlayer replaceCurrentItemWithPlayerItem:[AVPlayerItem playerItemWithURL:movieURL]]; 
    avPlayer.rate = 0.0f; 
} 

私が使用します。

[avPlayer replaceCurrentItemWithPlayerItem:[[AVPlayerItem playerItemWithURL:movieURL] retain]]; 

ところで、あなたはでオブジェクトの「zombieness」を決定することはできませんゾンビの仕組みはクライアントのマシンに設定できないシステム構成(環境変数など)に依存しているため、これはデバッグ専用のツールであり、適切な開発テクニックではありません。ゾンビはあなたのプログラムのバグです。ゾンビは、メモリ関連のバグを見つけて排除するのに役立ちます。それ以外の場合は、追跡が非常に困難です。

+0

ゾンビについての説明のためにモッティに感謝します。お役立ち情報 – Oscar

関連する問題