2012-05-12 54 views
1

我想使用静态类变量来维护将在我的应用中的多个类之间共享的播放列表对象的状态。需要内存管理帮助 - 静态类变量目标C

我在AppDelegate中调用getPlaylist,以便调用我的initialize类方法并设置MSMutableArray。

但是,当我调用addItemToPlaylist时,内容变量不再是NSMutableArray的静态实例。相反,它指向内存中完全不同的地址 - 每次调试时都有一个不同的地址。

我在做什么明显错误?提前致谢。

#import "Playlist.h" 
static NSMutableArray *content; 

@implementation Playlist 

+ (void)initialize 
{ 
    content = [NSMutableArray arrayWithCapacity:10]; 
} 

+ (NSMutableArray *)getPlaylist 
{ 
    if ([content count] == 0) 
     return nil; 

    return content; 
} 

+ (void)addItemToPlaylist:(PlaylistTrack *)track; 
{ 
    [content addObject:track]; 
} 

回答

2

[NSMutableArray arrayWithCapacity]返回一个自动释放的对象(应该在运行时约那里是没有电流自动释放池的投诉)。

改为使用[[NSMutableArray alloc] initWithCapacity],并添加一个类方法以在完成时释放它。

编辑:干杯@Lvsti。

+0

'[[NSMutableArray alloc] initWithCapacity:]'准确地说 – Lvsti

+0

@Lvsti Yup - 为获取它而欢呼。 – trojanfoe

+0

令人惊叹的东西 - 感谢您的快速回复。如果出现在控制台窗口中,我没有看到有关autorelease池的运行时投诉?再次感谢。 –