2012-05-12 3 views
1

정적 클래스 변수를 사용하여 내 앱의 여러 클래스간에 공유되는 재생 목록 개체의 상태를 유지하려고합니다.메모리 관리 도움말 - 정적 클래스 변수 목표 C

내 AppDelegate에서 getPlaylist를 호출하여 클래스 초기화 메서드를 호출하고 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 예 - 그걸 잡으려고 들려주세요. – trojanfoe

+0

놀라운 답글을 보내 주셔서 감사합니다. autorelease 풀에 대한 런타임 불만 사항이 콘솔 창에 나타나야합니까? 다시 한번 감사드립니다. –