2011-02-04 135 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