2014-06-19 87 views
0

我能夠通過一些試驗和錯誤解決我的問題,但我不確定它爲什麼有效。我有兩個主要的類 - AboutWindowController和MainView - 並且我無法加載AboutWindow筆尖。爲什麼'windowWindow'在'window'不工作時在這裏工作?

這裏的東西,沒有工作(在MainView.m):

#import "MainView.h" 
#import "AboutWindowController" 
... 

-(id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     AboutWindowController *aboutWindowController = [[AboutWindowController alloc] initWithWindowNibName: @"AboutWindowController"]; 
     [aboutWindowController window]; 
     ... 
    } 
return self; 
} 
... 

然而,這沒有工作(使用LOADWINDOW代替窗口)

#import "MainView.h" 
#import "AboutWindowController" 
... 

-(id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     AboutWindowController *aboutWindowController = [[AboutWindowController alloc] initWithWindowNibName: @"AboutWindowController"]; 
     [aboutWindowController loadWindow]; 
     ... 
    } 
return self; 
} 
... 

文檔說我不該」調用loadWindow並且該窗口無論如何調用它,但窗口沒有出現。玩弄了一會兒後,我能夠通過添加屬性來實現文件來解決這個問題,具體如下:

#import "MainView.h" 
#import "AboutWindowController.h" 

@interface MainView 
@property (strong, nonatomic) AboutWindowController *aboutWindowController; 
@end 

@implementation MainView 

-(id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     _aboutWindowController = [[AboutWindowController alloc] initWithWindowNibName: @"AboutWindowController"]; 
     [_aboutWindowController window]; 
    ... 
    } 
return self; 
} 
... 

我不知道爲什麼加入固定的一切財產。有人能爲我闡明這一點嗎?

回答

0

在前兩種情況下,對您的AboutWindowController對象的引用被保存在局部變量中。當該局部變量超出範圍時,ARC將釋放參考。如果這是最後一個參考,窗口控制器將被釋放,此時它會釋放窗口。如果這是對窗口的最後一個引用,那麼窗口將被釋放並從屏幕上移除(可能在您有機會看到它之前)。

通過將引用分配給強實例變量,可確保窗口控制器足夠長的時間來查看窗口。

我不確定爲什麼它在你撥打-loadWindow時有效。它可能是-loadWindow直接調用時會泄漏對窗口(或控制器)的引用(這可能是您不應該這樣做的一個原因)。

+0

Got it!我有一種感覺,這與ARC清理事情有關。爲了將來的參考,是否有一種簡單的方法來測試以查看對象是否正在實例化或清理?我相信我會再次遇到這樣的問題。 – Connor

+0

沒有編程方法來測試指針是指向一個真實的對象還是它是懸掛的。你可以在你的類中重寫'-dealloc'並讓它記錄一條消息。您可以在Allocations模板下運行您的應用程序,並查看您的班級實例已完成了哪些工作,以及是否有任何工作仍處於「現場」狀態。 –