下面是我得到的错误消息:
ContactsWithPN - start loop
Program received signal: “0”.
Data Formatters temporarily unavailable, will re-try after a 'continue'. (Unknown error loading shared library "/Developer/usr/lib/libXcodeDebuggerSupport.dylib")以下是导致此问题的代码:
+(NSArray *) contactsWithPhoneNumbers{
NSArray *contacts = [ABContactsHelper contacts];
NSMutableArray *rv = [[NSMutableArray alloc] init];
NSLog(@"ContactsWithPN - start loop");
for (int i = 0; i< [contacts count] ; i++) {
ABContact * c = (ABContact*)[contacts objectAtIndex:i];
ABContact * fullContact = [ABContact contactWithRecordID:[c recordID]];
if ([[fullContact phoneArray] count] > 0) {
[rv addObject:fullContact];
}
}
NSLog(@"ContactsWithPN - end loop");
NSArray *ret = [[NSArray alloc] initWithArray:rv];
return ret;
}在调用上述类方法的View Controller中,我添加了以下代码来查看是否发送了内存警告。他们不是!
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
NSLog(@"InviteFriends - memory warning received");
}观察:+发现错误发生在不同的时间点-有时在索引253,其他时间在246.+仅在IPhone上发生-不在模拟器上(在模拟器上,有<5个触点)
发布于 2010-10-02 22:16:04
您没有收到内存警告并不意味着它没有被发送:内存警告被传递到主运行循环;当您的函数仍在运行时,它们不会被传递。
相反,可以考虑查看电话控制台(Xcode->Organizer->Your phone-> console,或iPCU中的等效控制台)。如果它说“内存级别很关键”,并提到杀死你的应用程序,那么你的内存就用完了。此外,当内存耗尽时,崩溃报告器会在被终止的进程旁边写一个“内存不足”的崩溃日志;您应该会在管理器中看到这些。(由于iOS 4的“多任务处理”,丢弃也发生在后台任务上。)
如果这仅仅是由于大量的自动释放对象,你可以通过显式的自动释放池在一定程度上缓解它:
for (int i = 0; i< [contacts count] ; i++) {
NSAutoreleasePool * pool = [NSAutoreleasePool new];
...
[pool drain]; pool = nil;
}您的代码还会泄漏ret和rv。
发布于 2010-10-02 10:17:57
当您的应用程序内存不足时,会发生此错误。你应该读一下Apples Memory Management Guide。
发布于 2010-11-24 10:23:13
我发现ABContact也会泄漏内存,请看下面的部分ABContactHelper代码。
+ (NSArray *) contacts
{
ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *thePeople = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSMutableArray *array = [NSMutableArray arrayWithCapacity:thePeople.count];
for (id person in thePeople)
{
[array addObject:[ABContact contactWithRecord:(ABRecordRef)person]];
}
[thePeople release];
//I think need CFRelease(addressBook); here
return array;
}https://stackoverflow.com/questions/3843903
复制相似问题