アプリをARCに切り替えました。Xcode が提供するリファクタリング ツールのおかげで、移行は部分的に成功しました。動作しない部分は奇妙なエラーです。
メソッドの入れ替え (method_exchangeImplementations) を使用して、UIView の initWithFrame を呼び出す代わりに、myInitWithFrame コードを呼び出すようにしました。リファクタリング プロセスで myInitWithFrame のメソッド宣言でエラーが発生したため、メソッドの宣言の後に__属性__ ((objc_method_family(init))) を追加しました。現在、これはすべて iOS 6.0 以降では完全に正常に機能しますが、iOS 5.0 (サポートしたい最も低い iOS) では機能しません。EXC_BAD_ACCESS (コード = 1、アドレス = 0X28) を取得しています。実行するたびに、まったく同じメモリアドレスが表示されます。
私はそれを呼び出すUIWebViewを持っています:
[[UIWebView alloc] initWithFrame:webViewFrame];
myInitWithFrame が初期化を行った後、self を返し、クラッシュします。スレッド トレースでは、以下に示すように、[UIWebView 保持] メソッドのリンゴのコード (メソッドはグレー表示) でクラッシュすることが示されています。
Thread 1, Queue : com.apple.main-thread
#0 0x3515a7d2 in -[UIWebView retain] ()
#1 0x316ddef4 in objc_retain ()
#2 0x0011528c in -[UIView(style) myInitWithFrame:]
画像を投稿するのに十分な担当者がいません。
同じコードが iOS 6.0 では機能するのに、iOS 5.0 では機能しない理由はありますか?