當我嘗試編譯下面的代碼:爲什麼編譯器不上[NSObject的初始化]返回錯誤
int main(int argc, const char * argv[])
{
@autoreleasepool {
[NSObject init];
}
return 0;
}
編譯器讓它生成並運行系統中的應用程序崩潰,但以下情況除外:
2017-08-14 14:56:07.937859-0700 NSObjectInit[30512:11241814] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSObject<0x7fff9fd83140> init]: cannot init a class object.'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff818e32cb __exceptionPreprocess + 171
1 libobjc.A.dylib 0x00007fff966f348d objc_exception_throw + 48
2 CoreFoundation 0x00007fff8196517f +[NSObject(NSObject) init] + 127
3 NSObjectInit 0x0000000100000f2d main + 61
4 libdyld.dylib 0x00007fff96fd9235 start + 1
5 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
據我所知,NSObject類有+ init方法,但是我沒有在公共頭文件中找到它,如果它是私有的,編譯器應該告訴我們沒有這樣的方法。任何想法爲什麼編譯器讓我們建立這個代碼?
'+ initialize'或'-init'?我不知道'+ init'方法。 –
@GerdK nope,+ init。嘗試編譯它,你會看到:) –