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

內存(核心基礎/對象C)未歸屬的對象的引用計數的遞減不正確這一點由來電者。在iPad中調用者未在此處擁有的對象的引用計數的不正確遞減量

在此先感謝。

+0

....哪一行?另外,你的dmrPlaylists屬性是如何聲明的? – borrrden

+0

@property(nonatomic,retain)NSMutableArray * dmrPlaylists;是的,[self.dmrPlaylists發佈]上的警告; - (void)dealloc {\t \t //[self.dmrPlaylists release]; \t [delegateList release]; \t free(_dmrStateChangeNotifier); \t [super dealloc]; } – HamasN

回答

1

1)不要在您的initdealloc方法中使用self.dmrPlaylists。相反,與底層變量進行交互。

2)呼叫[super dealloc]

不知道哪一行警告後,不能肯定,但這些都是問題。

+0

@property(nonatomic,retain)NSMutableArray * dmrPlaylists;是的,[self.dmrPlaylists發佈]上的警告; – HamasN

+0

dmrPlaylists是初始autorelease,是否意味着沒有必要在dealloc方法中釋放dmrPlaylists? – HamasN

+1

您需要在init和dealloc中使用dmrPlaylists,而不是self.dmrPlaylists(即您合成的後臺實例變量),否則可能會發生一些未定義的行爲。 – borrrden

0

您還沒有告訴我們上述代碼的哪一部分會導致錯誤。使用調試器逐個分析它發生的位置並找回給我們。

此外,你還沒有給我們足夠的代碼來知道什麼是錯的。例如:

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

可能最終會使用自動發佈的可變數組調用-setDmrPlaylists:-setDmrPlaylists:在哪裏定義?是否聲明@property聲明和@synthesize編?如果是這樣,它是否宣佈爲retain屬性?如果沒有,那麼setter將永遠不會在可變數組上調用retain。當autorelease在事件循環結束時遞減可變數組的保留計數時,它可能會被釋放,從而指向垃圾內存。

相關問題