新版本快要发布的时候用Instrument测了一下内存泄露的问题。发现了3个问题。
-
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的问题
经过查阅这里发现确实有人说这是一个bug。于是我根据回答的建议改成了UIAlterController。发现确实没有问题了。
-
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
以上是一点记录,希望有同样问题的人能得到解决,如果有更好的方法还请一起交流分享。
网友评论