2011-02-04 55 views
0

我的代碼的這一部分有多個內存泄漏。特別是對於這些數組:PlaylistItem,PlaylistItemID和PlaylistItemLength。問題是我無法成功釋放數組。當我嘗試使用insert [xxxx release];此代碼中的任何地方,應用程序都會鎖定。這絕對是驅使我nurtz!NSMutableArray內存泄漏問題

-(void)configureCueSet { 
MPMediaQuery *myPlaylistsQuery = [MPMediaQuery playlistsQuery]; 
NSArray *playlists = [myPlaylistsQuery collections]; 

//Get # of items in a playlist and names ------------------------------------- 
NSArray *songs; 
for (MPMediaPlaylist *playlist in playlists) { 
    NSString *playListItem = [playlist valueForProperty: MPMediaPlaylistPropertyName]; 
    if ([playListItem isEqualToString: savedLastSelectedPlaylist]){ 
     songs = [playlist items]; 
    } 
} 
PlaylistItem = [[NSMutableArray alloc] init]; 
PlaylistItemID = [[NSMutableArray alloc] init]; 
PlaylistItemLength = [[NSMutableArray alloc] init]; 
for (MPMediaItem *song in songs) { 
    [PlaylistItem addObject:[song valueForProperty: MPMediaItemPropertyTitle]]; 
    [PlaylistItemID addObject:[song valueForProperty: MPMediaItemPropertyPersistentID]]; 
    [PlaylistItemLength addObject:[song valueForProperty: MPMediaItemPropertyPlaybackDuration]]; 
} 
} 

回答

1

是否多次調用該方法?如果是這樣,您的泄漏可能發生在該作業上。你想要:

[PlayListItem release]; 
PlaylistItem = [[NSMutableArray alloc] init]; 

[PlayListItemID release]; 
PlaylistItemID = [[NSMutableArray alloc] init]; 

[PlaylistItemLength release]; 
PlaylistItemLength = [[NSMutableArray alloc] init]; 

如果你不釋放之前有什麼,那麼你會得到一個泄漏。

1

試圖插入[xxx版本]會釋放內容,而不是數組。應用程序崩潰是因爲您正在釋放要添加到數組中的對象。根據文檔(here),NSArray中的值會自動保留,並在數組解除分配後立即釋放。因此,如果您想要發佈任何這些陣列,只需鍵入[PlaylistItem release]即可。

+0

感謝您的回覆。添加[PlayListItem發佈];產生「SIGABRT」。我很困惑。 – Marsman 2011-02-04 21:45:21

+0

你在哪裏添加它?只有在確定不再需要它們的情況下,才應該釋放陣列。就你的代碼片段而言,你正在填充數組而不實際使用它們。在某處放置它們將毫無意義。 – 2011-02-04 21:46:54