因为我的项目中并没有使用长链接,对于数据的实时更新,是单方面的接口查询方式,测试内存使用过程中遇到两个问题对性能影响比较大。
1.数据层
数据层使用了YYModel 去配置当前的数据使用问题,对于request 或者 response中对于数据的书末数模转换的问题 code如下:
// Model 转换 字典
+ (NSMutableDictionary*)returnToDictionaryWithModel:(id)model
{
NSMutableDictionary *userDic = [NSMutableDictionary dictionary];
unsignedintcount =0;
objc_property_t *properties = class_copyPropertyList([model class], &count);
//获取基类数据
ClasssuperClass =class_getSuperclass([modelclass]);
if(superClass && (superClass == [FDSRequestBaseModelclass] || superClass == [FDSResponseBaseModelclass])) {
unsignedinttempCount =0;
objc_property_t*superProperties =class_copyPropertyList([superClassclass], &tempCount);
for(inti =0; i < tempCount; i++) {
constchar*tempName =property_getName(superProperties[i]);
NSString*tempPropertyName = [NSStringstringWithUTF8String:tempName];
idtempPropertyValue = [modelvalueForKey:tempPropertyName];
if(tempPropertyValue) {
[userDicsetObject:tempPropertyValueforKey:tempPropertyName];
}
}
free(superProperties);
}
for(inti =0; i < count; i++) {
constchar*name =property_getName(properties[i]);
NSString *propertyName = [NSString stringWithUTF8String:name];
idpropertyValue = [modelvalueForKey:propertyName];
if(propertyValue) {
[userDicsetObject:propertyValueforKey:propertyName];
}
}
free(properties);
returnuserDic;
}
产生的问题1,在大量使用接口的时候,该request model转换NSDictionary中会损耗大量的cpu使用
解决方案:直接调用原始AFNetworking框架,将封装的多层管理去掉,解决了一部分数模转换中的CPU大量损耗问题(并不是很完美的解决方案)
问题2,在实时更新数据过程中,该response 中对model也进行了便利,来赋予每个数据的更新,这里我使用了异步绘制画布,在将结果setneeddisplay,同步绘制到view上模拟苹果原生控件的使用,产生了一个异常问题mapData:769: *** ImageIO - mmapped file changed (old: 44679 new: 44374),会偶尔出现上半部分有数据,但有一部分整体是一片黑(即使数据更新了 文字成黑色也看不到,我并没有验证该结果)
解决方案:我去掉了同步绘制,不管是Tableview滑动刷新,还是接口赋值数据我都将该异步绘制结果直接赋予了集成的UIImageview class
我测试线程的更新
部分线程执行和使用率 以及系统回收时间让项目跑了一整晚 统计结果如第一张图所示:对于other processes的大量内存值 这个我查询了cache的diskmemory 物理内存并没有存储该数据,缓存数据也没有,因为没有找到该数据存储位置,智能暂时推测该数据可能存储在xcode编译的某个地方,free是一直在变动中,该内存的使用,我想知道有哪位朋友验证过,可以分享一下心得。谢谢
网友评论