iOS遇到的几个内存泄露问题

新版本快要发布的时候用Instrument测了一下内存泄露的问题。发现了3个问题。

  • AFHTTPSessionManagerd的问题

AFHTTPSessionManagerd

由于使用了第三方网络请求库AFNetworking。每次请求都进行一次初始化,然后没有被释放。我在这里发现提问者是使用单例来处理的,于是我也使用单例来处理这个类。

@implementation LLHttpTool


+ (AFHTTPSessionManager *)shareManager {
    static AFHTTPSessionManager *manager;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [AFHTTPSessionManager manager];
        manager.responseSerializer = [AFHTTPResponseSerializer serializer];
        manager.requestSerializer.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
        manager.requestSerializer.stringEncoding = NSUTF8StringEncoding;
        
    });
    return manager;
}
@end

这样下次再使用的时候,并不是在进行初始化。

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

而是直接使用

 AFHTTPSessionManager *manager = [LLHttpTool shareManager];

再经过测试,发现这个问题已经不存在了。

  • UIActionSheet的问题

UIActionSheet

经过查阅这里发现确实有人说这是一个bug。于是我根据回答的建议改成了UIAlterController。发现确实没有问题了。

  • MKMapView的问题

MKMapView

经过查阅这里发现,释放MKMapView的那些对象并不能有效解决。设计成单例在AppDelegate里是一个不错的选择。

@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (nonatomic, strong) MKMapView *mapView;
@end


@implementation AppDelegate

- (MKMapView *)mapView {
    if (!_mapView) {
        _mapView = [[MKMapView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    }
    return _mapView;
}

@end

以上是一点记录,希望有同样问题的人能得到解决,如果有更好的方法还请一起交流分享。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,752评论 25 709
  • AFHTTPRequestOperationManager 网络传输协议UDP、TCP、Http、Socket、X...
    Carden阅读 4,541评论 0 12
  • 学员:唐逸夫、孙铭涵 时间:5月20日 任课教师:张老师 课程目标:滑轮的知识简单地搭建一条邮局包裹传送系统。 2...
    嘻_阅读 228评论 0 0
  • -------馨语 2016年的一次雪惊动了整个世界, 记忆真任性不经意间拉开了去年冬天的序幕。 那时候凭的就是一...
    海仙子阅读 277评论 0 0