Plz幫助我理解principalClass用於什麼?它的語法是什麼。我明白,它是在NSBundle類,但我們可以創建它的任何捆綁只是爲了特定於可綁定的捆綁嗎? PLZ幫助我瞭解principalClass的概念。NSBundle的主要類
感謝你。
Plz幫助我理解principalClass用於什麼?它的語法是什麼。我明白,它是在NSBundle類,但我們可以創建它的任何捆綁只是爲了特定於可綁定的捆綁嗎? PLZ幫助我瞭解principalClass的概念。NSBundle的主要類
感謝你。
bundle的「主類」僅僅是Objective-C類,它被標記爲bundle的主類,因此將由bundle實例的-principalClass方法返回。
沒有更多,沒有什麼更多,沒有魔法。
它只存在於可加載的bundle中,因爲只有可加載的bundle定義了新的Objective-C類。
principalClass允許您在加載包後知道要使用哪個類。例如,假設您使用包來表示圖像處理應用程序的插件。當您告訴Objective-C運行時加載「CSISharpener.bundle」包時,它會將一堆新類加載到內存中。但是,您仍然需要知道發送消息的類的名稱,以便實際使用使用該插件。
在我們的例子中,principalClass可能會返回CSISharpeningFilter,它符合我們告訴插件開發者使用的插件協議。所以我們可以創建一個「principalClass」的實例並開始使用它,而不提前知道類名是什麼。
換句話說,principalClass允許程序加載包和簡單的方法來找到他們剛加載的代碼中的「入口點」。究竟它用於什麼取決於加載該包的代碼以及它用於的內容。
我會給你一個如何創建和加載一個插件作爲插件的例子。希望這會對你有所幫助。我必須說我同意其他2個(迄今爲止)的答案。所以...
創建一個Xcode項目作爲「Bundle」(在Xcode 3.2.6是在新建項目 - >框架& Library-> select「Bundle」)。創建以下文件...
PClass.h
#import <Foundation/Foundation.h>
@interface PClass : NSObject {
}
- (NSString*) stringMessage;
@end
PClass.m
- (NSString*) stringMessage {
return @"Hallo from plugin";
}
中的.plist文件中添加以下兩個條目的項目
:
「捆綁顯示器名稱「」MyPlugin「
」主類「」PClass「
然後編譯項目並將二進制文件(.../build/Debug/yourPlugin.bundle)移動到您喜歡的文件夾中,以便保留您的項目插件(可複製到aProject.app/Plugins/有點額外的照顧)。
然後到已經Xcode項目添加以下內容:
- (void) loadPlugin {
id bundle = [NSBundle bundleWithPath:@"the path you/placed/yourPlugin.bundle"];
NSLog(@"%@", [[bundle infoDictionary] valueForKey:@"CFBundleDisplayName"]);
// Here you can preview your plugins names without loading them if you don't need to or just to
// display it to GUI, etc
NSError *err;
if(![bundle loadAndReturnError:&err]) {
// err
} else {
// bundle loaded
Class PluginClass = [bundle principalClass]; // here is where you need your principal class!
// OR...
//Class someClass = [bundle classNamed:@"KillerAppController"];
id instance = [[PluginClass alloc] init];
NSLog(@"%@", [instance stringMessage]);
[instance release]; // If required
[bundle unload]; // If required
}
}
你剛剛通過其主體類加載的束作爲應用程序的插件。
Thanku ..你可以給我任何使用principalClass的開源項目的鏈接。 – suse 2009-12-29 05:13:41