Iphone 奇数CoreData内存泄漏

Iphone 奇数CoreData内存泄漏,iphone,objective-c,ios,core-data,memory-leaks,Iphone,Objective C,Ios,Core Data,Memory Leaks,在仪器中对我的应用程序进行最终泄漏测试时,我遇到了两个以上的泄漏: 泄漏对象:_PFArray,#:1地址:0x2a11c0大小:32字节负责库:CoreData负责帧:newFetchedRowsForFetchPlan\u MT 及 泄漏对象:Malloc 16字节,#:1地址:0x24d6b0大小:16字节负责库:CoreData负责帧:newFetchedRowsForFetchPlan\u MT 两个泄漏的堆栈跟踪都指向: records = [[self.managedObjectC

在仪器中对我的应用程序进行最终泄漏测试时,我遇到了两个以上的泄漏:

泄漏对象:_PFArray,#:1地址:0x2a11c0大小:32字节负责库:CoreData负责帧:newFetchedRowsForFetchPlan\u MT

泄漏对象:Malloc 16字节,#:1地址:0x24d6b0大小:16字节负责库:CoreData负责帧:newFetchedRowsForFetchPlan\u MT

两个泄漏的堆栈跟踪都指向:

records = [[self.managedObjectContext executeFetchRequest:request error:&error] retain];
在CoreData获取中

这些漏洞是什么?我以前从未见过他们。当我构建和分析时,它们不会弹出。有人有什么建议吗

谢谢

编辑:

下面是记录数组的代码。Records只是.h中声明的NSarray

  /*
 Fetch existing events.
 Create a fetch request; find the Event entity and assign it to the request; add a sort descriptor; then execute the fetch.
 */
marblebeingdragged=YES;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Child" inManagedObjectContext:_managedObjectContext];
[request setEntity:entity];

// Order the events by creation date, most recent first.
NSSortDescriptor *nameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
NSSortDescriptor *prizeDescriptor = [[NSSortDescriptor alloc] initWithKey:@"prize" ascending:NO];
NSSortDescriptor *neededDescriptor = [[NSSortDescriptor alloc] initWithKey:@"marblesneeded" ascending:NO];
NSSortDescriptor *colorDescriptor = [[NSSortDescriptor alloc] initWithKey:@"color" ascending:NO];
NSSortDescriptor *reachedDiscriptor = [[NSSortDescriptor alloc] initWithKey:@"prizereached" ascending:NO];



NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:nameDescriptor,prizeDescriptor,neededDescriptor,colorDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[nameDescriptor release];
[colorDescriptor release];
[prizeDescriptor release];
[neededDescriptor release];
[reachedDiscriptor release];
[sortDescriptors release];

// Execute the fetch -- create a copy of the result.
NSError *error = nil;
records = [[self.managedObjectContext executeFetchRequest:request error:&error] retain];
您需要释放“记录”对象。您需要在使用完它之后释放它,而不是使用dealloc方法。发布更多的代码。你是如何定义记录的?如果需要帮助,请发布整个核心数据代码块

records = [[self.managedObjectContext executeFetchRequest:request error:&error] retain];
//.... code using records
[records release];
编辑:

要么用这个

records = [[self.managedObjectContext executeFetchRequest:request error:&error]]; // no retian
还是这个

records = [[[self.managedObjectContext executeFetchRequest:request error:&error] retain] autorelease];

您是否在完成后释放retain?@whitelionV我在MainViewController的dealloc方法中释放记录。我认为您不必
保留
获取的结果。我已经添加了整个代码块。此外,整个应用程序都会编辑记录数组并将其保存到核心数据中。仅当视图关闭时才应释放它。谢谢,我对记录对象不感兴趣。它是.h文件中的保留属性吗?那是你第一次分配的地方吗?无论如何,尝试在末尾添加自动释放,然后查看。这应该可以解决问题,因为我看不到代码的相关部分。或者删除retain并尝试self.records=[[self.managed…记录数组被声明为:
@property(strong,非原子)NSArray*records;
,当您询问内存泄漏问题时,您没有提到您正在使用ARC!我没有使用ARC。将strong切换为retain时,会出现相同的泄漏。
records = [[[self.managedObjectContext executeFetchRequest:request error:&error] retain] autorelease];