0

OK,情況有點複雜,但問題本身的性質應該是跟我的可可內存管理的人比我更熟悉相當簡單。EXC_BAD_ACCESS在NSWindowController

的一些細節: - 從我的主要的應用程序,我加載一個「加載」包(其中包括一個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被設置初始化。
  • 當我在- (void)windowDidLoad:測試API的價值它仍然顯示了罰款。
  • 但是:當試圖從另一種方法(實際上是一個IBAction爲在我的插件的窗口,點擊按鈕觸發)內做同樣的事情......試圖讓[self API]觸發EXC_BAD_ACCESS錯誤。

我在做什麼錯?有任何想法嗎?

回答

2

要麼申報財產爲weak,如果要在對象死亡它被自動設置爲nil,或strong,如果你想保留的對象活着(strong可能是你想要什麼)。

unsafe_unretained將導致一個懸掛指針,如果該對象被釋放(這就是爲什麼它稱爲「不安全」..)