美文网首页iOS经验总结
iOS遇到的几个内存泄露问题

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

作者: HelloAda | 来源:发表于2017-05-15 08:50 被阅读139次

    新版本快要发布的时候用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
    

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

    相关文章

      网友评论

        本文标题:iOS遇到的几个内存泄露问题

        本文链接:https://www.haomeiwen.com/subject/bavxxxtx.html