1
引用這是代碼:崩潰`[NSApp表示運行]`當委託不再
@interface AppDelegate : NSObject <NSApplicationDelegate>
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
printf("My app delegate: finish launching\n");
}
@end
int main(int argc, char *argv[])
{
@autoreleasepool
{
[NSApplication sharedApplication];
[NSApp setDelegate:[[AppDelegate alloc] init]];
[NSApp run];
}
}
它崩潰的[NSApp run]
但我實在不明白,我錯過了什麼。如果我在run
之前添加[NSApp finishLaunching]
,則會崩潰。
如果我沒有設置委託,它不會崩潰。
如果我之前引用委託,它工作正常:
AppDelegate* appDelegate = [[AppDelegate alloc] init];
[NSApp setDelegate:appDelegate];
所以我想它會立即釋放委託,因爲ARC,也因爲第一個版本的代表大概只有弱引用,對不對?但是,你應該如何做相同的代碼呢?
莫非你嘗試按照這種方式設置委託:'[[NSApplication sharedApplication] setDelegate:self];' – divaka
是否有任何理由不使用'NSApplicationMain(argc,(const char **)argv)'? – user3125367
@ user3125367:是的(在我的情況下)。 – Albert