小编Tam*_*nad的帖子

核心数据导入 - 不释放内存

我的问题是核心数据和内存未被发布.我正在进行同步过程,从WebService导入数据,返回一个json.我在内存中加载要导入的数据,循环并创建NSManagedObjects.导入的数据需要创建与其他对象有关系的对象,总共大约有11.000.但是为了隔离问题,我现在只创建第一级和第二级的项目,将关系排除在外,这些是9043个对象.

我开始检查使用的内存量,因为应用程序在进程结束时崩溃(使用完整的数据集).第一次内存检查是在内存中加载json之后,因此测量确实只考虑创建,并将对象插入到Core Data中.我用来检查使用的内存是这个代码()

-(void) get_free_memory {

    struct task_basic_info info;
    mach_msg_type_number_t size = sizeof(info);
    kern_return_t kerr = task_info(mach_task_self(), 
                                   TASK_BASIC_INFO,
                                   (task_info_t)&info,
                                   &size);
    if( kerr == KERN_SUCCESS ) {
        NSLog(@"Memory in use (in bytes): %f",(float)(info.resident_size/1024.0)/1024.0 );
    } else {
        NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
    }
}

我的设置:

  • 1个持久性商店协调员
  • 1 Main ManagedObjectContext(MMC)(NSMainQueueConcurrencyType用于读取(仅读取)应用程序中的数据)
  • 1后台ManagedObjectContext(BMC)(NSPrivateQueueConcurrencyType,undoManager设置为nil,用于导入数据)

BMC独立于MMC,因此BMC不是MMC的子环境.并且他们不共享任何父母背景.我不需要BMC通知MMC的更改.所以BMC只需要创建/更新/删除数据.

者平台:

  • iPad 2和3
  • iOS,我已经测试过将部署目标设置为5.1和6.1.没有区别
  • XCode 4.6.2

问题: 导入数据后,使用的内存不会停止增加,即使在进程结束后iOS似乎也无法耗尽内存.在数据样本增加的情况下,导致内存警告和应用程序关闭后.

研究:

  1. Apple文档

  2. 将数据导入Core Data(Stackoverflow)时要记住的要点的好回顾

  3. 测试完成并分析内存释放.他似乎和我有同样的问题,他发送了Apple Bug报告但尚未得到Apple的回复.(来源)

  4. 导入和显示大型数据集(来源)

  5. 表示导入大量数据的最佳方式.虽然他提到:

    "我可以在稳定的3MB内存中导入数百万条记录而无需调用-reset."

    这让我觉得这可能是某种可能的?(来源 …

memory memory-management core-data objective-c ios

13
推荐指数
1
解决办法
3509
查看次数

Alamofire 4.0 RequestRetrier应该(_,retry,with,completion)不被调用

我使用RequestRetrierAlamofire 4.0控制重试过期访问令牌的请求.我在这里关注文档.

我有一个非常类似于文档OAuth2Handler中可用的示例实现RequestAdapterRequestRetrier.

我遇到的问题func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion)是永远不会被召唤.然而adapt,RequestAdapter实现的方法确实被调用了.

调试,我看到SessionDelegate只有should(_,retry,with,completion)在出现错误时调用,但返回与授权问题相关的状态代码的请求似乎不会产生错误,因此永远不会调用该方法.

我在这里错过了什么吗?

ios swift alamofire

13
推荐指数
2
解决办法
7378
查看次数