2012-05-25 4 views
1
-(id)init 
{ 
if (self = [super init]) 
{ 
    self.dmrPlaylists = [[[NSMutableArray alloc] initWithCapacity:0] autorelease]; 
    } 
} 
-(void)dealloc 
{ 
[self.dmrPlaylists release]; 
} 
-(DMRPlaylist *)getDMRPlaylistByUUID:(NSString *)deviceUUID 
{ 
if (deviceUUID == nil) 
    return nil; 

for(int i = 0; i < self.dmrPlaylists.count; i++) 
{ 
    DMRPlaylist * dmrPlaylist = [self.dmrPlaylists objectAtIndex:i]; 
    if([dmrPlaylist.deviceUUID isEqualToString:deviceUUID]) 
    { 
     return dmrPlaylist; 
    } 
} 

return nil; 
} 

메모리 (Core Foundation/Object-C) 소유하지 않은 개체의 참조 횟수가 잘못 감소합니다 이 점은 발신자에 의한 것입니다.iPad에서 발신자가이 시점에서 소유하지 않은 개체의 참조 횟수가 잘못 계산되었습니다.

미리 감사드립니다.

+0

.... 어떤 라인? 또한 dmrPlaylists 속성은 어떻게 선언됩니까? – borrrden

+0

@property (비 원자력, 보유) NSMutableArray * dmrPlaylists; 예, [self.dmrPlaylists release]에 대한 경고입니다. - (void) dealloc {\t \t //[self.dmrPlaylists release]; \t [delegateList release]; \t 무료 (_dmrStateChangeNotifier); \t [super dealloc]; } – HamasN

답변

1

1) initdealloc 방법에는 self.dmrPlaylists을 사용하지 마십시오. 대신 기본 변수와 상호 작용하십시오.

2) [super dealloc]

, 경고가 켜져있는 줄을 확신 할 수는 없지만,이 문제가되는 모른 채 호출합니다.

+0

@property (비 원자력, 보유) NSMutableArray * dmrPlaylists; 예, [self.dmrPlaylists release]에 대한 경고입니다. – HamasN

+0

dmrPlaylists는 autorelease가있는 init이므로 dealloc 메소드에서 dmrPlaylists를 릴리스 할 필요가 없다는 의미입니까? – HamasN

+1

init 및 dealloc에서 self.dmrPlaylists (즉, 합성하는 백업 인스턴스 변수)가 아닌 dmrPlaylists를 사용해야하거나 정의되지 않은 동작이 발생할 수 있습니다. – borrrden

0

위의 코드에서 오류의 원인이 무엇인지 알려주지 않았습니다. 디버거를 사용하여 단계별로 단계별로 찾아 디버그를 수행하십시오.

또한 무엇이 잘못되었는지 알 수있는 충분한 코드를 제공하지 않았습니다. 예를 들어 :

self.dmrPlaylists = [[[NSMutableArray alloc] initWithCapacity:0] autorelease]; 

아마도 궁극적으로 오토 릴리즈 변경 가능한 배열 -setDmrPlaylists:를 호출합니다. -setDmrPlaylists:은 어디에 정의되어 있습니까? @property 문과 @synthesize에 의해 선언 되었습니까? 그렇다면 retain 속성으로 선언되어 있습니까? 그렇지 않으면 설정자는 retain을 가변 배열에 절대로 호출하지 않습니다. 그리고 autorelease이 이벤트 루프의 끝에서 변경 가능한 배열의 보유 수를 줄이면 사용자가 정크 메모리를 가리 키면서 할당 해제됩니다.

관련 문제