2011-09-28 124 views
1

讓我說我有一個NSObject的AppController:NSObject。使用IB,我將一個NSObject控件拖到MainMenu.xib中,並將該類指向AppController。由於MainMenu.xib只加載一次,並且MainMenu.xib中的對象在應用程序的整個生命週期中都處於內存中,它是否使AppController對象成爲單例?在MainMenu.xib中添加一個NSObject是否會創建一個單例對象?

然後我可以拖動一個IBOutlet到AppDelegate來訪問這個單例對象。這看起來很快捷。這是一種好的做法還是令人灰心?

我認爲標準方法是在類中添加一個靜態AppController * sharedInstance並使用+(AppController *)sharedAppController進行訪問。

回答

1

不,它不是單身人士,因爲沒有任何東西阻止你在代碼中創建同一類的另一個實例。

這只是創建單個實例的簡便方法。裏面MainMenu.xib

和對象是在內存中的應用

這是不正確的生活。如果沒有人保留這些對象(或者在GC下對它們持有強烈的引用),則它們將被釋放。這是事實。請參閱下面的Peter Hosey的評論。

+0

感謝您澄清我的誤解。 – jemeshsu

+0

「這是不正確的。如果沒有人保留這些對象(或者在GC下有強烈的引用),他們將被釋放。「在Mac上,這是不正確的。如果沒有人釋放這些對象(當不在GC下)時,它們將被釋放。 AppKit代表文件所有者保留頂級對象:http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i -CH4-SW6 MainMenu的文件所有者是NSApplication對象。在iOS上,你是對的;所有對象都必須保留一些東西才能保持活力。 –

+0

感謝糾正,彼得。我糾正了我的答案。 –

相關問題