2011-08-02 56 views
1

我不是100%確定MPMusicPlayerController底下發生了什麼(源代碼會很好)。我不知道每次創建一個像我的委託方法handlePlayPauseTapped這樣的方法被調用時,我在應用上創建的負載有多沉重。我會假設,因爲你如何實例化它,即沒有alloc/init,它正在爲我做一些自動緩存;但是,API文檔對此沒有提及。一遍又一遍地實例化一個MPMusicPlayerController。好/壞的做法

我應該有一個全局變量,啓動一次,並重用它的應用程序的生活?或者,我可以爲自己節省一些代碼複雜性,只需創建一個我需要的代碼。就我而言,我需要一個來自衆多視圖的iPod控制器。

- (IBAction) handlePlayPauseTapped { 

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

想法在這裏的最佳做法?

回答

1

我懷疑你的代碼實際上並沒有創建新的實例(似乎更可能在內部是單個對象)。當然,這在調試器中很容易檢查。

爲了更大的靈活性,我可能會讓音樂播放器控制器成爲我的課程的一個實例變量,無論如何這都會導致問題無法解決。

+0

是的,當我在樂器工具中運行它時,每次調用此函數時都沒有改變內存使用情況。由於iPod控制器是一種獨特的野獸,即它是系統上的共享應用程序,因此似乎沒有任何用於每個分配的額外內存。 – vesselhead

+0

說到實例變量點。如果這不是一個特殊情況,並且這是一次又一次被添加到堆中的其他類型的對象。由於我的對象在多個視圖中被訪問,即多個類,您是否已經將這個應用程序委託的實例變量,然後從那裏分享? – vesselhead

相關問題