2019年3月7日 星期四

Objective C語言 走馬看花【程式設計】

Objective C語言,顧名思義是一個物件導向的程式語言,但他的物件導向很特別,直接使用了他的前輩Smalltalk的許多方式,並且和C合在一起。
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基金會的贊助。
您只需要支持我們,完全不會花到錢!