2011-08-02 11 views
1

私は100%MPMusicPlayerControllerのフードの下で何が起きているのか分かりません。私は、デリゲートメソッドhandlePlayPauseTappedのようなメソッドが呼び出されるたびに1つ作成することで、アプリケーションで作成する負荷がどれほど重いか分かりません。 allocate/initを使わずにインスタンス化する方法があるため、私は自動的にキャッシングを行っていると仮定します。しかし、APIのドキュメントはこれについて何も言わない。MPMusicPlayerControllerを何度もインスタンス化します。良い/悪い練習

グローバル変数が必要な場合は、一度起動してアプリのライフサイクルで再利用できますか?または、コードの複雑さを軽減し、どこでも必要な場所に作成できますか?私の場合、私はiPod Controllerを多数のビューから必要としています。

- (IBAction) handlePlayPauseTapped { 

    MPMusicPlayerController *iPodController = [MPMusicPlayerController iPodMusicPlayer]; 
    if (iPodController.playbackState == MPMusicPlaybackStatePlaying) { 
     [iPodController pause]; 
    } else { 
     [iPodController play]; 
    } 
} 

ここでのベストプラクティスはどうですか?

答えて

1

私はあなたのコードが実際に新しいイントネンスを作成しているとは思えません(内部的には単一のオブジェクトと思われます)。もちろん、これはデバッガで簡単に確認できます。

柔軟性を高めるために、私はおそらくミュージックプレーヤーコントローラを自分のクラスのインスタンス変数にして、とにかく問題を解決するでしょう。

+0

ええと、インストゥルメントツールで実行すると、この関数を呼び出すたびにメモリ使用量に変化はありません。 iPodコントローラはユニークな獣であるため、システム上の共有アプリケーションであるため、割り当てごとに追加のメモリが使用されているようには見えません。 – vesselhead

+0

インスタンス変数ポイントと話す。これが特殊なケースではない場合、これは何度も何度もヒープに追加されていた他のタイプのオブジェクトでした。オブジェクトは複数のビュー、つまり複数のクラスでアクセスされているため、これをアプリケーションデリゲートのインスタンス変数にしてからそこから共有しますか? – vesselhead

関連する問題