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
您没有收到内存警告这一事实并不意味着它没有被发送:内存警告被传送到主运行循环; 当您的功能仍在运行时,它们将无法发送.
相反,请考虑查看电话控制台(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)
你的代码也泄漏ret和rv.
| 归档时间: |
|
| 查看次数: |
6071 次 |
| 最近记录: |