2012-05-12 16 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]を使用し、完了したらクラスメソッドを追加して解放します。

EDIT:Cheers @Lvsti。

+0

'[[NSMutableArray alloc] initWithCapacity:]'正確には – Lvsti

+0

@Lvsti Yup - それをキャッチするための歓声。 – trojanfoe

+0

すばらしいお返事ありがとうございます。コンソールウィンドウに表示されるはずですが、自動解放プールに関するランタイムの苦情は表示されませんか?再度、感謝します。 –