首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据格式暂时不可用,将在'continue‘之后重试

数据格式暂时不可用,将在'continue‘之后重试
EN

Stack Overflow用户
提问于 2010-10-02 08:49:54
回答 4查看 6.1K关注 0票数 4

下面是我得到的错误消息:

代码语言:javascript
复制
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")

以下是导致此问题的代码:

代码语言:javascript
复制
+(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中,我添加了以下代码来查看是否发送了内存警告。他们不是!

代码语言:javascript
复制
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    NSLog(@"InviteFriends - memory warning received");
}

观察:+发现错误发生在不同的时间点-有时在索引253,其他时间在246.+仅在IPhone上发生-不在模拟器上(在模拟器上,有<5个触点)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-02 22:16:04

您没有收到内存警告并不意味着它没有被发送:内存警告被传递到主运行循环;当您的函数仍在运行时,它们不会被传递。

相反,可以考虑查看电话控制台(Xcode->Organizer->Your phone-> console,或iPCU中的等效控制台)。如果它说“内存级别很关键”,并提到杀死你的应用程序,那么你的内存就用完了。此外,当内存耗尽时,崩溃报告器会在被终止的进程旁边写一个“内存不足”的崩溃日志;您应该会在管理器中看到这些。(由于iOS 4的“多任务处理”,丢弃也发生在后台任务上。)

如果这仅仅是由于大量的自动释放对象,你可以通过显式的自动释放池在一定程度上缓解它:

代码语言:javascript
复制
for (int i = 0; i< [contacts count] ; i++) {
    NSAutoreleasePool * pool = [NSAutoreleasePool new];

    ...

    [pool drain]; pool = nil;
}

您的代码还会泄漏retrv

票数 6
EN

Stack Overflow用户

发布于 2010-10-02 10:17:57

当您的应用程序内存不足时,会发生此错误。你应该读一下Apples Memory Management Guide

票数 1
EN

Stack Overflow用户

发布于 2010-11-24 10:23:13

我发现ABContact也会泄漏内存,请看下面的部分ABContactHelper代码。

代码语言:javascript
复制
+ (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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3843903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档