iphone - 数据格式化程序暂时不可用,将在 'continue' 后重试

标签 iphone memory-management fullcontact

这是我收到的错误消息:

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 个联系人)

最佳答案

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

相反,请考虑查看手机控制台(Xcode->组织器->您的手机->控制台,或 iPCU 中的等效项)。如果它说“内存水平至关重要”并提到终止您的应用程序,那么您的内存就已经用完了。此外,当内存不足时,崩溃报告器会在被终止的进程旁边写入一个“内存不足”崩溃日志,并带有“抛弃”字样;您应该在管理器中看到这些。 (自从iOS 4的“多任务处理”以来,抛弃后台任务也发生了。)

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

for (int i = 0; i< [contacts count] ; i++) {
    NSAutoreleasePool * pool = [NSAutoreleasePool new];

    ...

    [pool drain]; pool = nil;
}

您的代码还泄漏了 retrv

关于iphone - 数据格式化程序暂时不可用,将在 'continue' 后重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3843903/

相关文章:

Android Media Player 挂起或返回 null

api - 根据 fliptop 或 fullcontact 等电子邮件获取推特 ID

ruby - 如何对从外部 API 调用 ruby​​ 返回的 404 运行 "if"语句

iphone - 调用 iPhone 静态库中包含的类别的方法会导致 NSInvalidArgumentException

iphone - 关于以编程方式访问 ios 设置

ios - 释放类对象时使用 block 进行内存管理

php - 最好不要将 &$ 与大字符串一起使用以节省内存吗?

ruby-on-rails - 对 API 调用进行排队以符合速率限制

iphone - 如何确定应用程序是从电话调用返回还是从后台恢复?

iphone - 将图像保存到保存的照片后,相机胶卷 Assets 图像不可用