2012-05-25 1 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; 
} 

памяти (основной фонд/Объект-С) Некорректного декрементом счетчика ссылок объекта, который не принадлежит в этот момент вызывающий.Некорректного декремента счетчика ссылок объекта, который не принадлежит в данный момент вызывающего в IPAD

Заранее спасибо.

+0

.... который линия? Также, как объявляется ваше свойство dmrPlaylists? – borrrden

+0

@property (неатомный, сохраняющий) NSMutableArray * dmrPlaylists; да, предупреждение о выпуске [self.dmrPlaylists]; - (void) dealloc {\t \t //[self.dmrPlaylists release]; \t [delegateList release]; \t бесплатно (_dmrStateChangeNotifier); \t [super dealloc]; } – HamasN

ответ

1

1) Не используйте self.dmrPlaylists в своих методах init и dealloc. Вместо этого взаимодействуйте с базовой переменной.

2) Позвоните [super dealloc]

Не зная, какой линии предупреждение включено, не может быть уверен, но эти проблемы.

+0

@property (nonatomic, сохранить) NSMutableArray * dmrPlaylists; да, предупреждение о выпуске [self.dmrPlaylists]; – HamasN

+0

dmrPlaylists - это init с autorelease, это означает, что нет необходимости выпускать dmrPlaylists в методе dealloc? – HamasN

+1

Вам нужно использовать dmrPlaylists, а не self.dmrPlaylists (т. Е. Переменную экземпляра подстановки, которую вы синтезируете) в init и dealloc или какое-то неопределенное поведение может случиться. – borrrden

0

Вы не сказали нам, какая часть вышеуказанного кода вызывает ошибку. Шаг через него с отладчиком, чтобы изолировать, где это происходит, и вернуться к нам.

Кроме того, вы не дали нам достаточно кода, чтобы узнать, что случилось. Например:

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

вероятно, в конечном счете, вызывает -setDmrPlaylists: с autoreleased изменяемый массив. Где определено -setDmrPlaylists:? Является ли оно объявлено оператором @property и @synthesize ed? Если да, то объявляется ли оно как собственность retain? Если нет, то сеттер никогда не вызовет retain в изменяемом массиве. И когда autorelease уменьшает количество сохраняемых изменений в конце цикла события, он, скорее всего, будет освобожден, если вы укажете на нежелательную память.

Смежные вопросы

 Смежные вопросы