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 
@property (nonatomic, strong) MKMapView *mapView;
@end


@implementation AppDelegate

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

@end

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

你可能感兴趣的:(iOS遇到的几个内存泄露问题)