結論
表題の通り
UIAlertView
や UIAlertController
を使用しないで自作するか、
使用していないライブラリを使用しよう・・・
( ˘ω˘).。oO(RINGO KUTABARE)
経緯
UIAlertView
はリークするみたいだし(参考:http://mokyu.game-ss.com/it%E9%96%A2%E9%80%A3/uialertview%E3%81%AB%E3%81%A6%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%AF%E7%99%BA%E7%94%9F-ios8-)
そもそも非推奨なので、UIAlertController
を使おう
↓
- (void)doAlert
{
// 考えうる限りの最小のアラート表示処理でテスト
UIAlertController *ac = [UIAlertController alertControllerWithTitle:@"title" message:@"message" preferredStyle:UIAlertControllerStyleAlert];
[ac addAction:[UIAlertAction actionWithTitle:@"ok" style:UIAlertActionStyleDefault handler:nil]];
[self presentViewController:ac animated:YES completion:nil];
}
↓
Instruments
で確認したら、OK 押した時に UIAlertView と同じくらいリークしてる・・・
変数 ac の代わりに UIViewController
を設置した時は問題がない
(´・ω・`)・・・?
↓
英語がちゃんと読めないけど、
UIAlertController でメモリリークが発生したけど、iOS のバグだよ(1年前)
ってことが書いてると思う きっとそう
なんにせよ現状(2016年1週間前)で漏れてるわけで・・・もう解決策探すの嫌なわけで・・・
↓
(´;ω;`)2度とアップルのアラートつかわん
おまけ
一応 UIAlertController をプロパティに保存しといて破棄せずに呼び出す
なら、リークはしないでアラートを使用することができる
(presentViewController で呼んだアラートが破棄される時にリークしてんだね)
が、UIAlertController は タイトル、メッセージは変更できるが
UIAlertAction
は 追加し続けることしかできない
だめだこりゃ
やりようはあるだろうけど、そこに労力をつぎ込むなら頭に書いた結論を遂行したほうが早い・・・
Instruments
の出し方は、とりあえず Xcode
でビルドして、Debug Session
で Memory
を開いて、
そこにある Profile in Instruments
をクリックするとなんかウィンドウが開くよ
あとは上に書いてるコードを実行してアラートを開いたり閉じたりすれば、赤いチェックマークがついてリークしてるよってでるよ
これは iOS8.4 の端末ではできたんだけど
iOS9 の端末ではなぜかできなかったよ
検索かけたらまた
iOS9 のバグ
って感じの英語が見えたので俺は調べるのをやめたよ
もう俺は英語読みたくないんだ やめてくれ( ˘ω˘)