数据格式化程序暂时不可用,将在"继续"后重试

ame*_*hta 4 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")
Run Code Online (Sandbox Code Playgroud)

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

+(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;
}
Run Code Online (Sandbox Code Playgroud)

在调用所述类方法的View Controller中,我添加了以下代码以查看是否正在发送内存警告.他们不是!

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    NSLog(@"InviteFriends - memory warning received");
}
Run Code Online (Sandbox Code Playgroud)

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

tc.*_*tc. 6

您没有收到内存警告这一事实并不意味着它没有被发送:内存警告被传送到主运行循环; 当您的功能仍在运行时,它们将无法发送.

相反,请考虑查看电话控制台(Xcode-> Organizer->您的电话 - >控制台,或iPCU中的等效电话).如果它说"内存级别至关重要"并且提到杀死你的应用程序,那么你的内存已经耗尽.此外,当你的内存不足时,崩溃记者会在被杀死的进程旁边写一个"低内存"崩溃日志并"抛弃"; 你应该在组织者中看到这些.(由于iOS 4的"多任务处理",抛弃也会发生在后台任务中.)

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

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

    ...

    [pool drain]; pool = nil;
}
Run Code Online (Sandbox Code Playgroud)

你的代码也泄漏retrv.