最初に、5.0+ を対象とする iOS アプリを作成し、単純なメモリ管理に ARC を使用しました。その後、下位互換性のために、iOS 4.3 をサポートすることにしました。それから私はただ
- インストールされた iOS 4.3 シミュレーター
- アプリの展開ターゲットを 4.3 に変更
- クリーン、ビルド、実行
しかし、アプリは次の出力で予期せず終了しました
dyld: シンボルが見つかりません: _objc_loadWeakRetained
参照元: /Users/xxx/Library/Application Support/iPhone Simulator/4.3.2/Applications/16E98912-33B5-4660-A9A3-879D92735E44/myApp.app/myApp
想定される場所: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/Foundation.framework/Foundation
4.3 が弱い参照をサポートしていないことは知っていましたが、コンパイル時にコンパイラが文句を言わず、単に実行時にクラッシュしたのは奇妙です。
更新: weak キーワードの代わりにunsafe_unretained
を使用しましたが、アプリはとにかく実行されました。しかし、次のような警告がたくさんありました
__NSAutoreleaseNoPool(): クラス __NSArrayM のオブジェクト 0x564bd90 は、プールが配置されていない状態で自動解放されました - ただリークしています"* '
それは正常でしたか?これらの警告を取り除く方法は?