我的问题是核心数据和内存未被发布.我正在进行同步过程,从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));
}
}
我的设置:
BMC独立于MMC,因此BMC不是MMC的子环境.并且他们不共享任何父母背景.我不需要BMC通知MMC的更改.所以BMC只需要创建/更新/删除数据.
者平台:
问题: 导入数据后,使用的内存不会停止增加,即使在进程结束后iOS似乎也无法耗尽内存.在数据样本增加的情况下,导致内存警告和应用程序关闭后.
研究:
我使用RequestRetrierAlamofire 4.0控制重试过期访问令牌的请求.我在这里关注文档.
我有一个非常类似于文档OAuth2Handler中可用的示例实现RequestAdapter和RequestRetrier.
我遇到的问题func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion)是永远不会被召唤.然而adapt,RequestAdapter实现的方法确实被调用了.
调试,我看到SessionDelegate只有should(_,retry,with,completion)在出现错误时调用,但返回与授权问题相关的状态代码的请求似乎不会产生错误,因此永远不会调用该方法.
我在这里错过了什么吗?