NSBlogger

意識高いブログ

AFNetworkingでメモリリークが起こったときの対処法

AFNetworking

Objective C のライブラリで超ど定番なHttpClientです。いまさらながら使い始めました。AFNetworking/AFNetworking · GitHub

メモリリーク

f:id:Kamekiti:20150209233708p:plain
AFNetworkingのラッパーを作って既存のAPIとの通信をすべて置き換えました。一応メモリリークを見ておこうと思ってInstrumentsで測定したら、上記の通りメモリリークが多発してました。

解決策

@property (nonatomic, strong) AFHTTPSessionManager *sessionManager;

[self.sessionManager invalidateSessionCancelingTasks:YES];

当然なのですが、AFHTTPSessionManagerAFURLSessionManagerでinvalidateSessionCancelingTasks:を呼んでセッションを無効化しておく必要がありました。明示的に呼んであげないと、AFHTTPSessionManagerが解放されないためメモリリークになっていました。