我的代码的这一部分有多个内存泄漏。特别是这些数组: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]];
}
}
答案 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];
如果你不释放以前的东西,那么你就会泄漏。