返回NSArray时,这是ARC中的内存泄漏吗?

时间:2016-02-10 09:15:52

标签: ios objective-c memory-leaks nsarray automatic-ref-counting

我试图在网上找到答案,我确实在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],但没有帮助;

0 个答案:

没有答案