-(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)调用者此时不拥有的对象的引用计数的不正确的减少。
提前致谢。
答案 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
在事件循环结束时减少可变数组的保留计数时,它可能会被释放,让你指向垃圾内存。