NSMutableArray内存泄漏问题

时间:2011-02-04 21:26:52

标签: iphone

我的代码的这一部分有多个内存泄漏。特别是这些数组:PlaylistItem,PlaylistItemID和PlaylistItemLength。问题是我无法成功释放数组。当我尝试使用insert [xxxx release]时;在此代码中的任何位置,应用程序锁定。它驱使我绝对努力!

-(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]];
}
}

2 个答案:

答案 0 :(得分:1)

尝试插入[xxx release]会释放内容,而不是数组。应用程序崩溃,因为您正在释放要添加到阵列的对象。根据文档(here),NSArray中的值会自动保留,并在释放数组后立即释放。因此,如果要释放任何这些数组,只需键入[PlaylistItem release]

答案 1 :(得分:1)

该方法是否被多次调用?如果是这样,您的泄漏可能发生在该分配上。你想要:

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

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

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

如果你不释放以前的东西,那么你就会泄漏。