[Objective-C學習筆記] 1.1 Hello World

Yeh James
3 min readApr 22, 2018

最近公司開始著重在開發iOS App,用的是Objective-C語言,由於我對Objective-C不是很熟,本來想用Leetcode題目來練,但發現Leetcode不支援Objective-C,所以就改拿Hacker Rank的題目來練習Objective-C。

https://www.hackerrank.com/domains/tutorials/30-days-of-code

#import <Foundation/Foundation.h>int main(int argc, const char * argv[]){@autoreleasepool{NSLog(@"Hello, World.");}return 0;}

以上是Objective-C中最簡單的程式,命名為helloWorld.m, .m這個副檔名代表的是Objective-C的程式。

稍微解釋一下內容

  1. Objective-C原本要自己管理記憶體,@autoreleasepool可以自動幫忙管理
  2. NSLog 代表print,但同時也會印出時間,有點像是log.info
  3. @”Hello, World.” @代表該字串屬於NSString的字串物件,沒加就是C的字串

Objective-C比較麻煩,要compile之後才能執行,compile指令是

clang -fobjc-arc helloWorld.m -o prog1

helloWorld.m代表程式的檔名

prog1代表編譯出來的程式名稱

第一天的題目是給一個String,印出來,然後再多加一句話(Hello, World.),看起來蠻簡單的,基本上就用上面的Hello World程式來改。

https://www.hackerrank.com/challenges/30-hello-world/problem

費了一番功夫,終於用Objective-C解出第一題了

#import <Foundation/Foundation.h>int main(int argc, const char * argv[]){@autoreleasepool{char word[100];scanf("%99[0–9a-zA-Z !]", word); // read up to 99 chars (leave room for NUL)printf("Hello, World.\n");printf("%s", word);}return 0;}

由於NSLog會印出時間等資訊,因此換回printf

scanf預設會用空格來斷,因此要在後面放正規符號來代表要scan的字元,%99是指說最多吃99個字元,留個空間給結尾。應該是Objective-C的結尾要放Nul,這樣程式跑到最後才知道字串到底了。

--

--