Apple自從某年某月開始,把主要使用的編譯器變成了clang,Objective C也主要在clang中實作,但我主要利用compileonline.com提供的GCC編譯器「玩」這個我不常使用的語言(我沒有Apple的電腦)。
一開始,有個簡單的Hello world程式:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog (@"hello world");
[pool drain];
return 0;
}
新版的Objective C好像不使用這種方法宣告AutoreleasePool,好像用autoreleasepool{}這樣括起來。
在Objective C物件不是呼叫函式,而是對物件傳送訊息。意思是,你可以傳送一個物件無法處裡的訊息,並且在編譯時可以通過,然後到了執行期間才會產生錯誤,像是我對這裡的pool發送一個奇怪的訊息。
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog (@"hello world");
[pool StrangeMessage];
[pool drain];
return 0;
}
結果編譯通過,雖然有發出警告,但是我還是可以正常執行,結果產生了這個錯誤:
main: Uncaught exception NSInvalidArgumentException,
reason: -[NSAutoreleasePool StrangeMessage]: unrecognized selector sent to instance 0xa1a3f0
下次來看看宣告物件和C++的不同。
👉【幫我們一個忙!】👈
👋如果您喜歡這篇文章,請在下方按5個Like!
❤您的支持是我們最大的動力!
您只要登入帳號(Facebook、Google),在下方按5個Like,我們就會收到來自LikeCoin基金會的贊助。
您只需要支持我們,完全不會花到錢!