0

OK、状況は少し複雑ですが、問題自体の性質は、私よりも Cocoa メモリ管理に詳しい人にとっては非常に単純なはずです。

いくつかの詳細: - メイン アプリから、「ロード可能な」バンドル (で構成されるNSWindowController) をロードしています - 両方のプロジェクト (メイン アプリと「プラグイン」) は ARC 対応です

私のプラグイン コードには、カスタムの初期化メソッドがあります。

- (id)initWithAPI:(id)api
{
    pluginWindowController* newPluginWindowController = [super initWithWindowNibName:@"PluginWindow"];

    if (newPluginWindowController)
    {
        [newPluginWindowController setAPI:api];
    }

    return newPluginWindowController;

}

これはAPI宣言されている方法です:

@property (unsafe_unretained) id API;

さて、ここにキャッチがあります:

  • 私は使用initWithAPI:して初期化しておりAPI、設定されています。
  • APIの値をテストしているときでも、- (void)windowDidLoad:問題なく表示されます。
  • ただし、別のメソッド内からまったく同じことを実行しようとすると(実際には、プラグインのウィンドウのボタンクリックによってトリガーされるIBAction)...取得しようとするとエラーが[self API]トリガーされEXC_BAD_ACCESSます。

私は何を間違っていますか?何か案は?

4

1 に答える 1

2

オブジェクトが終了したときにプロパティweakを自動的に に設定する場合は、プロパティを として宣言するか、オブジェクトを存続させたい場合は として宣言します (おそらくこれが必要です)。nilstrongstrong

unsafe_unretainedオブジェクトの割り当てが解除された場合、ダングリング ポインターが発生します (そのため、「安全でない」と呼ばれます..)

于 2013-03-04T10:36:10.617 に答える