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;
}

Memory(Core Foundation/Object-C) 调用者此时不拥有的对象的引用计数不正确递减。

提前致谢。

4

2 回答 2

1

1)不要self.dmrPlaylists在你的initdealloc方法中使用。相反,与基础变量交互。

2) 打电话[super dealloc]

在不知道警告在哪一行的情况下,无法确定,但这些都是问题。

于 2012-05-25T01:57:21.963 回答
0

您还没有告诉我们上述代码的哪一部分导致了错误。使用调试器逐步检查它以隔离它发生的位置并返回给我们。

此外,您还没有给我们足够的代码来知道出了什么问题。例如:

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

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

于 2012-05-25T02:14:15.227 回答