0

古いバージョンのフレームワークでは、A と B の 2 つのクラスがあり、A は B のサブクラスでした。新しいバージョンでは、B は存在せず、B のすべて (ivars など) は現在 A にあります。実行可能ファイルは古いバージョンに対してリンクされているため、_OBJC_IVAR_$_B.ivar を探します。ただし、新しいバージョンで動作する必要があります (再コンパイルできません)。_OBJC_IVAR_$_A.ivar への参照を変更する方法はありますか?

4

1 に答える 1

1

これを安全に行う方法はありません。シンボルを解決する必要があるだけでなく、ランタイムがそのシンボルにつまずく可能性があります。シンボルのエイリアシングうまくいくかもしれませんが、壊れやすいでしょう。

古いバージョンのフレームワークに依存して ivar シンボルを直接参照する実行可能ファイルは、互換性のあるクラス レイアウトを必要とし、それらの ivar を持つサブクラスを持つことを含みます。

Objective-C "2.0" が壊れやすい基本クラスの問題を解決したとき、ivar をクラスからクラスへ移動する機能は追加されませんでした (A と B の両方が同じ名前の ivar を持つことができるため、疑わしいものの、完全に有効です)。


絶対にこのパスをたどる必要がある場合は、リンク行でシンボルのエイリアスを試すことができます。ビルド設定エディターで、適切なエイリアス フラグを OTHER_LD_FLAGS に追加します。

 -alias symbol_name alternate_symbol_name
             Create an alias named alternate_symbol_name for the symbol symbol_name.  By default the
             alias symbol has global visibility.  This option was previous the -idef:indir option.
于 2013-06-21T16:42:50.660 に答える