此时由iPad中的调用者不拥有的对象的引用计数的不正确的减少

时间:2012-05-25 01:52:40

标签: ios memory-leaks

-(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)调用者此时不拥有的对象的引用计数的不正确的减少。

提前致谢。

2 个答案:

答案 0 :(得分:1)

1)请勿在{{1​​}}和self.dmrPlaylists方法中使用init。相反,与底层变量交互。

2)致电dealloc

不知道警告在哪一行,不能确定,但​​这些都是问题。

答案 1 :(得分:0)

您尚未告诉我们上述代码的哪一部分会导致错误。使用调试器逐步完成它以隔离它发生的位置并返回给我们。

另外,你没有给我们足够的代码来知道什么是错的。例如:

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

可能最终使用自动释放的可变数组调用-setDmrPlaylists:-setDmrPlaylists:在哪里定义?它是由@property声明和@synthesize声明的吗?如果是这样,它是否被声明为retain属性?如果没有,则setter永远不会在可变数组上调用retain。当autorelease在事件循环结束时减少可变数组的保留计数时,它可能会被释放,让你指向垃圾内存。