我试图在网上找到答案,我确实在SO上找到了一些相关的答案,但我真的想确认我理解正确(也许我不会)
我有这段代码:
- (NSArray*)arrayMethod
{
MPMediaQuery *albumArtistsQuery = [MPMediaQuery artistsQuery];
[albumArtistsQuery setGroupingType:MPMediaGroupingAlbumArtist];
return @[
@[ kTypeArtists, NSLocalizedString(@"Artists", nil), albumArtistsQuery, @"skin:iconArtists" ],
@[ kTypeAlbums, NSLocalizedString(@"Albums", nil), [MPMediaQuery albumsQuery], @"skin:iconAlbums" ],
@[ kTypeTracks, NSLocalizedString(@"Tracks", nil), [MPMediaQuery songsQuery], @"skin:iconSongs" ],
@[ kTypeComposers, NSLocalizedString(@"Composers", nil), [MPMediaQuery composersQuery], @"skin:iconComposers" ],
@[ kTypeGenres, NSLocalizedString(@"Genres", nil), [MPMediaQuery genresQuery], @"skin:iconGenres" ],
@[ kTypePlaylists, NSLocalizedString(@"Playlists", nil), [MPMediaQuery playlistsQuery], @"skin:iconPlaylists" ],
@[ kTypePodcasts, NSLocalizedString(@"Podcasts", nil), [MPMediaQuery podcastsQuery], @"skin:iconPodcasts" ],
];
}
- (void)someMethod
{
NSMutableDictionary* dict = [NSMutableDictionary dictionary];
for (NSArray* current in [self arrayMethod]) {
[dict setObject:current forKey:current[0]];
}
self.rootDict = [NSDictionary dictionaryWithDictionary:dict];
}
kTypeArtists等只是静态const NSString *
当我在xcode中使用分析工具(更具体地说是泄漏工具)时,我得到了返回的NSArray的内存泄漏,负责的框架是方法arrayMethod
根据我的理解,我的理解是,这不是内存泄漏,但在someMethod
内部我将NSArray作为参数传递给otherMethod
时,保留对于数组,count会增加,并且将在以后自动释放池耗尽时释放,但这可能会在运行时间稍后发生,因此它不是真正的内存泄漏,只是泄漏仪器显示它;
但我也持怀疑态度,该工具会将其显示为内存泄漏,那么它将是一个相当无用的工具;所以也许我的理解是不正确的,我确实有内存泄漏,但我不能理解为什么。
有人可以解释我是对还是错,为什么?谢谢!
编辑:
我还尝试将代码更改为[[self arrayMethod] copy]
,但没有帮助;