Skip to content

iOS7でUITextFieldが原因でNSXPCConnectionのリークが起きるのを解決する

2013年9月17日

iOS7になってリークが新たに出てきたLeak。

まず、NSXPCConnectionってなんじゃい?って話ですが、2つのプロセス間で相互通信を表現するクラス、とよくわからん。
ともかくこいつが問題っぽいと睨む。

そしてそいつのStackTraceを見ると、「UITextChecker〜」みたいなのがある。
そうスペルチェックです。

iOS7ではスペルチェックをONにしている状態でかつ、UITextFieldで間違ったスペルを入力し、赤いアンダーラインが引かれ、その状態でアプリがバックグラウンドに入るとリークします。
アホみたいなリーク仕様…。

対策方法としては以下

    UITextField *tf             = [[UITextField alloc] initWithFrame:CGRectMake(0, 100, 200, 30)];
    tf.spellCheckingType        = UITextSpellCheckingTypeNo;
    tf.autocorrectionType       = UITextAutocorrectionTypeNo;

このように、明示的にスペルチェック類を抜いてやるとスペルチェックしなくなるので良い。
そもそも、iPhoneの設定からスペルチェックを切っている場合には起きない。

この根っこを抜き出すのに3日かかった…。

広告

From → iPhone開発

One Comment
  1. John permalink

    I leak a ton of objects in addition to NSXPCConnection whenever I call resignFirstResponder on a UITextField. I couldn’t eliminate them with your fix either :(

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。