Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Objective-C http://MobileDev.TW
iOS APP Developer
Objective-C 語法入門
Ryan@MobileDev.TW
1
Objective-C http://MobileDev.TW
大綱
1.  Hello Objective-C! Xcode環境認識
2.  Objective-C語法類別、物件與方法
1)  從一個簡單的分數開始
2)  來寫一個計算機
3...
Objective-C http://MobileDev.TW
1.HELLO OBJECTIVE-C!XCODE環境認識
3
Objective-C http://MobileDev.TW
步驟1/4
1.  打開Xcode - Create a new Xcode project
4
Objective-C http://MobileDev.TW
步驟2/4
2.OS X-Application,選Command Line Tool,Next
5
Objective-C http://MobileDev.TW
Xcode的樣板專案分類
6
Objective-C http://MobileDev.TW
步驟3/4
3.  輸入HelloXcode,Type為foundation (Language:ObjC),Next
7
Objective-C http://MobileDev.TW
步驟4/4
4.  直接Run就可以在output看到Hello, World!
8
Objective-C http://MobileDev.TW
重點理解
1.  main是程式的進入點
2.  @autoreleasepool使用自動記憶體機制進行釋放
3.  利用NSLog來輸出資訊於console
9
Objective-C http://MobileDev.TW
What is NSLog?
游標放在NSLog上,按下alt,看到問號後按下滑鼠左鍵
10
Objective-C http://MobileDev.TW
修改NSLog輸出運算結果
11
Format Specifiers
http://developer.apple.com/library/mac/#documentation/C...
Objective-C http://MobileDev.TW
NSLog的描述邏輯
固定的內容直接寫上,變動的部分標上資料類別,然
後排列在後方
12
Objective-C http://MobileDev.TW
NSLog Specifier
13
Objective-C http://MobileDev.TW
NSLog Specifier
14
Objective-C http://MobileDev.TW
NSLog Specifier
15
Objective-C http://MobileDev.TW
You should got it NOW
•  Xcode可以製作哪些種類的應用程式
•  如何查閱進一步解釋
•  如何跳至匯入程式碼的原始位置
•  如何使用NSLog顯示變...
Objective-C http://MobileDev.TW
2.OBJECTIVE-C語法:類別、物件與方法
17
Objective-C http://MobileDev.TW
2-1.從一個簡單的分數開始
18
Objective-C http://MobileDev.TW
目前我們透過直接給值來顯示分數
指定固定的分子與分母
19
Objective-C http://MobileDev.TW
顯示一個分數
20
結果
Objective-C http://MobileDev.TW
現在我們希望蓋一間工廠,給它分子
與分母,它就產生分數給我們
類別的初體驗
21
Objective-C http://MobileDev.TW
建立類別
•  建立一個運算分數的類別
•  裡面有分子、分母
•  有輸入分子的方法
•  有輸入分母的方法
•  有輸出結果的方法
22
類別就像是生產工廠的運
作機制,建立了...
Objective-C http://MobileDev.TW
類別宣告
23
Objective-C http://MobileDev.TW
類別方法實作
24
Objective-C http://MobileDev.TW
Objective-C 術語小字典:iVar
•  實體變數(instance variable)
•  簡稱 iVar
•  相當於一個類別中的屬性定義
25
就像是一個工廠的儲...
Objective-C http://MobileDev.TW
物件方法與類別方法
•  物件方法必須使用在實體的物件上
•  物件方法前面是減號,類別方法前面是加號
26
Objective-C http://MobileDev.TW
蓋一間工廠,需要說明有哪些成員、
裡面有哪些機器在運作,然後再實際
把這些機器的運作流程都描述清楚
你給我豬肉,我給你香腸
27
Objective-C http://MobileDev.TW
主程式
28
結果
Objective-C http://MobileDev.TW
開始使用Objective-C最美的部分
[ClassOrInstance method];
呼叫某個類別或物件的方法,也像是給予該類別或物
件一個訊息:
[receiver me...
Objective-C http://MobileDev.TW
2-1-1.撰寫同名的方法存取IVAR
這些方法只是為了取得iVar的值或是寫入iVar的值而存在
30
Objective-C http://MobileDev.TW
2-1-1.撰寫同名的方法存取iVar
31
Objective-C http://MobileDev.TW
撰寫同名的方法存取iVar
32
Objective-C http://MobileDev.TW
撰寫同名的方法存取iVar
33
結果
Objective-C http://MobileDev.TW
2-2.來寫一個計算機!
讓我們一起再蓋一間更完善的工廠吧
34
Objective-C http://MobileDev.TW
2-2.來寫一個計算機!
•  建立一個計算機類別,裡面放一個iVar來儲存結果
•  跟結果相關的方法
•  設定結果
•  清除結果
•  取出結果
•  計算用的方法
•  ...
Objective-C http://MobileDev.TW
宣告類別
36
Objective-C http://MobileDev.TW
方法實作
37
Objective-C http://MobileDev.TW
主程式
38
結果
Objective-C http://MobileDev.TW
2-3.再論類別
39
Objective-C http://MobileDev.TW
全部都寫在一起,萬一程式碼很多怎麼辦
拆解類別的宣告與實作,放在不同的檔案中
40
Objective-C http://MobileDev.TW
用檔案來區分用途
•  全部寫在一起難以
管理
•  將每一組interface
與implentation分
開儲存:
•  .h檔:類別宣告
•  .m檔:類別方法實作
41
...
Objective-C http://MobileDev.TW
2-3-1.類別宣告跟方法實作分開
Fraction.h
42
Objective-C http://MobileDev.TW
類別宣告跟方法實作分開
Fraction.m
43
Objective-C http://MobileDev.TW
類別宣告跟方法實作分開
main.m
44
Objective-C http://MobileDev.TW
2-3-1-1.如何增加檔案?
Step1.點選Project,滑鼠右鍵,New File…
45
Objective-C http://MobileDev.TW
如何增加檔案?
Step2.決定要製作的檔案類型,再按下Next
46
Objective-C http://MobileDev.TW
如何增加檔案?
Step3.決定類別名稱,繼承自誰,然後按下Next
47
Objective-C http://MobileDev.TW
如何增加檔案?
Step4.決定儲存位置後,就會產生.h與.m檔,使用時
記得匯入
48
.h:宣告
.m:實作
Objective-C http://MobileDev.TW
2-3-1-2.再論類別與物件
•  設計類別作為模板,用類別來創造實體物件
•  在.h檔中設計類別,放置於@interface與@end中
•  實體變數(instance v...
Objective-C http://MobileDev.TW
2-3-2.自動產生SETTER與GETTER
每一個iVar如果都要撰寫對應的Setter與Getter,太麻煩了
50
Objective-C http://MobileDev.TW
2-3-2.自動產生Setter與Getter
•  在Fraction.h中加入
51
•  在Fraction.m中加入
•  加了這兩句,就會自動產生了
•  Getter:...
Objective-C http://MobileDev.TW
Lab
試著用上述的方法,並且將原先撰寫的Setter、Gette
r方法拿掉,看看是否還能正常運作
52
Objective-C http://MobileDev.TW
2-3-2-1.自動產生Synthesize
•  開發環境版本:Xcode4.5+iOS6之後
•  建立@property後,自動產生@synthesize
•  自動建立成 ...
Objective-C http://MobileDev.TW
2-3-2-2.另一種撰寫方式:點運算子
簡單直覺,比較接近其他語言的撰寫方式
54
Objective-C http://MobileDev.TW
Dot Operator:可存可取
[myFraction numerator]
is equal to 
myFraction.numerator
55
[myFraction ...
Objective-C http://MobileDev.TW
點運算子與[ ]混用
[[myAppObject theArray] insertObject:[myAppObject objectToInsert] atIndex:0];
-...
Objective-C http://MobileDev.TW
2-3-2-3.Property與Synthesize
•  取代了一般的宣告,並且實作了存取方法
•  實作時使用@synthesize (Xcode4.5後自動產生)

57
Objective-C http://MobileDev.TW
2-3-3.接收多個變數的方法
Objective-C另一個美麗的設計
58
Objective-C http://MobileDev.TW
2-3-3.接收多個變數的方法
宣告
59
實作
主程式使用
Objective-C http://MobileDev.TW
方法的語法
-(void) setMake:(NSString *) aMake andModel:(NSString *) aModel andYear:(int) aYear;...
Objective-C http://MobileDev.TW
2-3-4.SELF關鍵字
在自己的類別中,一個方法想要呼叫另一個方法來幫忙
61
Objective-C http://MobileDev.TW
self 關鍵字
•  使用self關鍵字來指定本身這個物件
•  在add方法中使用self來呼叫同物件中的其他方法
62
Objective-C http://MobileDev.TW
You should got it NOW
•  類別、物件與方法,想想工廠的運作
•  什麼是iVar? iVar的存取方式的進化
•  自己寫同名方法
•  自動產生
•  自...
Objective-C http://MobileDev.TW
3.繼承的概念
從0開始太累了,借用前人種的樹吧!
64
Objective-C http://MobileDev.TW
3-1.運用繼承再客製化類別
•  設計一個正方形類別
1.  若原先已經有矩形類別,那就繼承它,創一個正方形類別
2.  再增加正方形需要用的屬性與方法
3.  正方形這個類別,...
Objective-C http://MobileDev.TW
3-2.繼承的運作
•  父類別的所有實體變數與方法,都會成為子類別定
義的一部份。
•  子類別可以直接存取這些方法與實體變數。
•  首先會先確認該變數或方法是否存在目前物件的...
Objective-C http://MobileDev.TW
4.CATEGORY AND PROTOCOL
跨越類別的溝通方式,在對的時間,讓對的人來做對的事
67
Objective-C http://MobileDev.TW
4-1.CATEGORY
只是增加幾個方法,不用勞師動眾生個孩子出來
68
Objective-C http://MobileDev.TW
4-1.Category
•  擴充現有類別的定義,不須建立一個新的子類別
69
Objective-C http://MobileDev.TW
Category
•  例:在NSString加入一個新的方法
70
Objective-C http://MobileDev.TW
Category的特性
•  不能增加實體變數,只能增加方法
•  可以覆蓋方法,但是不能使用super
•  不用實作所有方法
•  影響範圍包含其所屬的子類別
71
Objective-C http://MobileDev.TW
4-2.協定PROTOCOL
時候未到,沒人知道,託人辦事,規矩要了
72
Objective-C http://MobileDev.TW
4-2協定 Protocol
•  類別間分享方法的清單
•  甲方:定義協定(宣告方法)
•  乙方:採納協定(實作方法)
73
Objective-C http://MobileDev.TW
4-2-1.定義協定
@protocol 協定名稱
宣告方法
@end
74
例如,在NSObject.h中,定義了NSCopying協定
Objective-C http://MobileDev.TW
4-2-2.採納協定
•  要實作的類別,則稱為遵從(conform)或採納(adopt
)該協定
•  在@interface後面加上協定
•  在@interface中不用再宣...
Objective-C http://MobileDev.TW
You should got it NOW
•  Category的使用時機
•  Protocol如何定義
•  Protocol如何遵循
76
Objective-C http://MobileDev.TW
5.FRAMEWORK
原廠給的、外面來的,這些積木幫你省去很多麻煩
77
Objective-C http://MobileDev.TW
5-1.什麼是Framework
•  Framework
•  泛指能夠簡化開發程序的一堆類別、方法、函數與文
件的集合。
•  Foundation Framework
•  ...
Objective-C http://MobileDev.TW
5-2.Cocoa 與 Cocoa Touch
•  Cocoa
•  Foundation Framework
•  Application Kit Framework
•  C...
Objective-C http://MobileDev.TW
6.資料型態 ID
有些事情,時候未到,真的沒人知道
80
Objective-C http://MobileDev.TW
資料型態 id
使用id來宣告不確定型態的物件
MyClass *myObject1;
id myObject2;
81
Objective-C http://MobileDev.TW
id這麼好用,為什麼不全部宣告為id?
•  宣告為特定資料形態者,稱之為靜態型別
•  int x=5;
•  靜態型別在編譯期間,即會檢查被呼叫的方法,若
無該方法,此時就會提...
Objective-C http://MobileDev.TW
7.星號與初始化
很多人常問,大家一起來看看
83
Objective-C http://MobileDev.TW
Q1.什麼時候要用*號?
•  Objective-C所有的物件都是透過指標的方式來找
到該位址,並進行存取。
•  而沒有使用指標的通常是C語言的原始型別(Primitive
t...
Objective-C http://MobileDev.TW
在Objectiv-C中可以使用C的基本型別
直接拿來用
85
int someInteger = 42;
float someFloatingPointNumber = 3.14...
Objective-C http://MobileDev.TW
Objectice-C本身也提供了額外的一些基本型別
•  BOOL
•  NSInteger、NSUInteger、CGFloat
86
Objective-C http://MobileDev.TW
用C語言的struct來持有基本型別的值
用NSRange結構來持有一個字串的位置與長度
87
NSString *mainString = @This is a long str...
Objective-C http://MobileDev.TW
物件也可以用來呈現基本型別的數值
用NSString物件來存放字串
88
NSString *firstString = [[NSString alloc] initWithCSt...
Objective-C http://MobileDev.TW
用NSNumber物件來持有各種基本型別的數值
char,double,float,int,long,short,….都可持有
89
NSNumber *magicNumber =...
Objective-C http://MobileDev.TW
用NSNumber物件來持有各種基本型別的數值
90
當然也可從物件中取出基本型別的值,
餵給Objective-C語言的基本型別
NSInteger anInteger = 64...
Objective-C http://MobileDev.TW
Q2.什麼時候要alloc  init?
•  每一個物件基本上都需要,但是有些類別方法本身
已經包含有配置與初始化,初學者會誤以為沒有做
這個動作。
91
Objective-C http://MobileDev.TW
程式設計基礎 – 使用OBJECTIVE-C
凡事起頭難
92
Objective-C http://MobileDev.TW
變數
•  每一種資料的型態不同,需要的儲存空間也不同
•  常用的資料型態
•  C語言
•  int
•  float
•  char
•  Objective-C語言
•  ...
Objective-C http://MobileDev.TW
常用的程式邏輯(1)如果
•  請撰寫一小段程式,讓使用者輸入姓名與性別
•  如果使用者是男生,請顯示:你好!XXX
•  否則,請顯示:妳好!XXX
94
Objective-C http://MobileDev.TW
常用的程式邏輯(1)如果
95
Objective-C http://MobileDev.TW
常用的程式邏輯(1)如果
•  if…else if…else
•  修改範例為:
•  請使用者輸入性別:(男生 1 女生 2 不願透露 3)
•  男生 – 你好
•  女生 ...
Objective-C http://MobileDev.TW
常用的程式邏輯(2)重複性
•  找到事物重複的規律,讓電腦幫你完成
•  在很久很久以前,有位勇士救了國王的女兒,國王想獎勵他,
就說,你可以提一個願望,我會滿足你。這位勇士對國...
Objective-C http://MobileDev.TW
常用的程式邏輯(2)重複性
98
Objective-C http://MobileDev.TW
常用的程式邏輯(2)重複性
99
Prochain SlideShare
Chargement dans…5
×

Programming in Objective-C

http://MobileDev.TW

  • Soyez le premier à commenter

Programming in Objective-C

  1. 1. Objective-C http://MobileDev.TW iOS APP Developer Objective-C 語法入門 Ryan@MobileDev.TW 1
  2. 2. Objective-C http://MobileDev.TW 大綱 1.  Hello Objective-C! Xcode環境認識 2.  Objective-C語法類別、物件與方法 1)  從一個簡單的分數開始 2)  來寫一個計算機 3)  再論類別 3.  繼承的概念 4.  CategoryProtocol 5.  Framework 6.  資料型態 id 7.  星號與初始化 2
  3. 3. Objective-C http://MobileDev.TW 1.HELLO OBJECTIVE-C!XCODE環境認識 3
  4. 4. Objective-C http://MobileDev.TW 步驟1/4 1.  打開Xcode - Create a new Xcode project 4
  5. 5. Objective-C http://MobileDev.TW 步驟2/4 2.OS X-Application,選Command Line Tool,Next 5
  6. 6. Objective-C http://MobileDev.TW Xcode的樣板專案分類 6
  7. 7. Objective-C http://MobileDev.TW 步驟3/4 3.  輸入HelloXcode,Type為foundation (Language:ObjC),Next 7
  8. 8. Objective-C http://MobileDev.TW 步驟4/4 4.  直接Run就可以在output看到Hello, World! 8
  9. 9. Objective-C http://MobileDev.TW 重點理解 1.  main是程式的進入點 2.  @autoreleasepool使用自動記憶體機制進行釋放 3.  利用NSLog來輸出資訊於console 9
  10. 10. Objective-C http://MobileDev.TW What is NSLog? 游標放在NSLog上,按下alt,看到問號後按下滑鼠左鍵 10
  11. 11. Objective-C http://MobileDev.TW 修改NSLog輸出運算結果 11 Format Specifiers http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/ Articles/formatSpecifiers.html
  12. 12. Objective-C http://MobileDev.TW NSLog的描述邏輯 固定的內容直接寫上,變動的部分標上資料類別,然 後排列在後方 12
  13. 13. Objective-C http://MobileDev.TW NSLog Specifier 13
  14. 14. Objective-C http://MobileDev.TW NSLog Specifier 14
  15. 15. Objective-C http://MobileDev.TW NSLog Specifier 15
  16. 16. Objective-C http://MobileDev.TW You should got it NOW •  Xcode可以製作哪些種類的應用程式 •  如何查閱進一步解釋 •  如何跳至匯入程式碼的原始位置 •  如何使用NSLog顯示變數的值 16
  17. 17. Objective-C http://MobileDev.TW 2.OBJECTIVE-C語法:類別、物件與方法 17
  18. 18. Objective-C http://MobileDev.TW 2-1.從一個簡單的分數開始 18
  19. 19. Objective-C http://MobileDev.TW 目前我們透過直接給值來顯示分數 指定固定的分子與分母 19
  20. 20. Objective-C http://MobileDev.TW 顯示一個分數 20 結果
  21. 21. Objective-C http://MobileDev.TW 現在我們希望蓋一間工廠,給它分子 與分母,它就產生分數給我們 類別的初體驗 21
  22. 22. Objective-C http://MobileDev.TW 建立類別 •  建立一個運算分數的類別 •  裡面有分子、分母 •  有輸入分子的方法 •  有輸入分母的方法 •  有輸出結果的方法 22 類別就像是生產工廠的運 作機制,建立了類別,就 可以根據這個類別,創造 出一個個的物件來使用。
  23. 23. Objective-C http://MobileDev.TW 類別宣告 23
  24. 24. Objective-C http://MobileDev.TW 類別方法實作 24
  25. 25. Objective-C http://MobileDev.TW Objective-C 術語小字典:iVar •  實體變數(instance variable) •  簡稱 iVar •  相當於一個類別中的屬性定義 25 就像是一個工廠的儲 存空間。 在設計類別時,需要 思考有哪些東西需要 一個儲存空間,這些 東西會被各個運作部 門所使用。
  26. 26. Objective-C http://MobileDev.TW 物件方法與類別方法 •  物件方法必須使用在實體的物件上 •  物件方法前面是減號,類別方法前面是加號 26
  27. 27. Objective-C http://MobileDev.TW 蓋一間工廠,需要說明有哪些成員、 裡面有哪些機器在運作,然後再實際 把這些機器的運作流程都描述清楚 你給我豬肉,我給你香腸 27
  28. 28. Objective-C http://MobileDev.TW 主程式 28 結果
  29. 29. Objective-C http://MobileDev.TW 開始使用Objective-C最美的部分 [ClassOrInstance method]; 呼叫某個類別或物件的方法,也像是給予該類別或物 件一個訊息: [receiver message]; 29
  30. 30. Objective-C http://MobileDev.TW 2-1-1.撰寫同名的方法存取IVAR 這些方法只是為了取得iVar的值或是寫入iVar的值而存在 30
  31. 31. Objective-C http://MobileDev.TW 2-1-1.撰寫同名的方法存取iVar 31
  32. 32. Objective-C http://MobileDev.TW 撰寫同名的方法存取iVar 32
  33. 33. Objective-C http://MobileDev.TW 撰寫同名的方法存取iVar 33 結果
  34. 34. Objective-C http://MobileDev.TW 2-2.來寫一個計算機! 讓我們一起再蓋一間更完善的工廠吧 34
  35. 35. Objective-C http://MobileDev.TW 2-2.來寫一個計算機! •  建立一個計算機類別,裡面放一個iVar來儲存結果 •  跟結果相關的方法 •  設定結果 •  清除結果 •  取出結果 •  計算用的方法 •  加法 •  減法 •  乘法 •  除法 35
  36. 36. Objective-C http://MobileDev.TW 宣告類別 36
  37. 37. Objective-C http://MobileDev.TW 方法實作 37
  38. 38. Objective-C http://MobileDev.TW 主程式 38 結果
  39. 39. Objective-C http://MobileDev.TW 2-3.再論類別 39
  40. 40. Objective-C http://MobileDev.TW 全部都寫在一起,萬一程式碼很多怎麼辦 拆解類別的宣告與實作,放在不同的檔案中 40
  41. 41. Objective-C http://MobileDev.TW 用檔案來區分用途 •  全部寫在一起難以 管理 •  將每一組interface 與implentation分 開儲存: •  .h檔:類別宣告 •  .m檔:類別方法實作 41 @inerface A:NSObject …. @end @implentation A …. @end @inerface B:NSObject …. @end @implentation B …. @end @inerface C:NSObject …. @end @implentation C …. @end A.h A.m B.h B.m C.h C.m
  42. 42. Objective-C http://MobileDev.TW 2-3-1.類別宣告跟方法實作分開 Fraction.h 42
  43. 43. Objective-C http://MobileDev.TW 類別宣告跟方法實作分開 Fraction.m 43
  44. 44. Objective-C http://MobileDev.TW 類別宣告跟方法實作分開 main.m 44
  45. 45. Objective-C http://MobileDev.TW 2-3-1-1.如何增加檔案? Step1.點選Project,滑鼠右鍵,New File… 45
  46. 46. Objective-C http://MobileDev.TW 如何增加檔案? Step2.決定要製作的檔案類型,再按下Next 46
  47. 47. Objective-C http://MobileDev.TW 如何增加檔案? Step3.決定類別名稱,繼承自誰,然後按下Next 47
  48. 48. Objective-C http://MobileDev.TW 如何增加檔案? Step4.決定儲存位置後,就會產生.h與.m檔,使用時 記得匯入 48 .h:宣告 .m:實作
  49. 49. Objective-C http://MobileDev.TW 2-3-1-2.再論類別與物件 •  設計類別作為模板,用類別來創造實體物件 •  在.h檔中設計類別,放置於@interface與@end中 •  實體變數(instance variables) •  相當於一個類別中的屬性定義 •  方法 •  該類別可以操作的功能 49
  50. 50. Objective-C http://MobileDev.TW 2-3-2.自動產生SETTER與GETTER 每一個iVar如果都要撰寫對應的Setter與Getter,太麻煩了 50
  51. 51. Objective-C http://MobileDev.TW 2-3-2.自動產生Setter與Getter •  在Fraction.h中加入 51 •  在Fraction.m中加入 •  加了這兩句,就會自動產生了 •  Getter:numerator,denominator •  Setter:setNumerator,setDenominator
  52. 52. Objective-C http://MobileDev.TW Lab 試著用上述的方法,並且將原先撰寫的Setter、Gette r方法拿掉,看看是否還能正常運作 52
  53. 53. Objective-C http://MobileDev.TW 2-3-2-1.自動產生Synthesize •  開發環境版本:Xcode4.5+iOS6之後 •  建立@property後,自動產生@synthesize •  自動建立成 @synthesize ivarName=_ivarName; •  在類別中,直接透過 _ivarName或self.ivarName 直接存取 •  在其他運作流程中,用objName.ivarName來存取 53
  54. 54. Objective-C http://MobileDev.TW 2-3-2-2.另一種撰寫方式:點運算子 簡單直覺,比較接近其他語言的撰寫方式 54
  55. 55. Objective-C http://MobileDev.TW Dot Operator:可存可取 [myFraction numerator] is equal to myFraction.numerator 55 [myFraction setNumerator : 1] is equal to myFraction.numerator=1
  56. 56. Objective-C http://MobileDev.TW 點運算子與[ ]混用 [[myAppObject theArray] insertObject:[myAppObject objectToInsert] atIndex:0]; -- [myAppObject.theArray insertObject:[myAppObject objectToInsert] atIndex:0]; [myAppObject setTheArray:aNewArray]; -- myAppObject.theArray = aNewArray; 56
  57. 57. Objective-C http://MobileDev.TW 2-3-2-3.Property與Synthesize •  取代了一般的宣告,並且實作了存取方法 •  實作時使用@synthesize (Xcode4.5後自動產生) 57
  58. 58. Objective-C http://MobileDev.TW 2-3-3.接收多個變數的方法 Objective-C另一個美麗的設計 58
  59. 59. Objective-C http://MobileDev.TW 2-3-3.接收多個變數的方法 宣告 59 實作 主程式使用
  60. 60. Objective-C http://MobileDev.TW 方法的語法 -(void) setMake:(NSString *) aMake andModel:(NSString *) aModel andYear:(int) aYear; 此方法的名稱為:setMake:andModel:andYear: 用C的方法寫長這樣: setMake:andModel:andYear(NSString* aMake,NSString *aModel, int aYear); 缺點:語法複雜 優點:可以看得出來每個變數的用途 方法名稱在Objective-C又稱為選擇器(selector) 60
  61. 61. Objective-C http://MobileDev.TW 2-3-4.SELF關鍵字 在自己的類別中,一個方法想要呼叫另一個方法來幫忙 61
  62. 62. Objective-C http://MobileDev.TW self 關鍵字 •  使用self關鍵字來指定本身這個物件 •  在add方法中使用self來呼叫同物件中的其他方法 62
  63. 63. Objective-C http://MobileDev.TW You should got it NOW •  類別、物件與方法,想想工廠的運作 •  什麼是iVar? iVar的存取方式的進化 •  自己寫同名方法 •  自動產生 •  自動產生Synthesize •  點運算子怎麼用 •  接收多個變數的方法怎麼寫、怎麼用? •  self關鍵字是什麼,什麼時機會用到? 63
  64. 64. Objective-C http://MobileDev.TW 3.繼承的概念 從0開始太累了,借用前人種的樹吧! 64
  65. 65. Objective-C http://MobileDev.TW 3-1.運用繼承再客製化類別 •  設計一個正方形類別 1.  若原先已經有矩形類別,那就繼承它,創一個正方形類別 2.  再增加正方形需要用的屬性與方法 3.  正方形這個類別,可以使用矩形類別中的屬性與方法 65 矩形類別 iVar Ra; iVar Rb; Method R1; Method R2; 正方形類別 : 矩形類別 iVar Ra; iVar Rb; Method R1; Method R2; iVar Sa; iVar Sb; Method S1; Method S2;
  66. 66. Objective-C http://MobileDev.TW 3-2.繼承的運作 •  父類別的所有實體變數與方法,都會成為子類別定 義的一部份。 •  子類別可以直接存取這些方法與實體變數。 •  首先會先確認該變數或方法是否存在目前物件的類 別定義中,若沒有,則會往父類別去尋找。 66
  67. 67. Objective-C http://MobileDev.TW 4.CATEGORY AND PROTOCOL 跨越類別的溝通方式,在對的時間,讓對的人來做對的事 67
  68. 68. Objective-C http://MobileDev.TW 4-1.CATEGORY 只是增加幾個方法,不用勞師動眾生個孩子出來 68
  69. 69. Objective-C http://MobileDev.TW 4-1.Category •  擴充現有類別的定義,不須建立一個新的子類別 69
  70. 70. Objective-C http://MobileDev.TW Category •  例:在NSString加入一個新的方法 70
  71. 71. Objective-C http://MobileDev.TW Category的特性 •  不能增加實體變數,只能增加方法 •  可以覆蓋方法,但是不能使用super •  不用實作所有方法 •  影響範圍包含其所屬的子類別 71
  72. 72. Objective-C http://MobileDev.TW 4-2.協定PROTOCOL 時候未到,沒人知道,託人辦事,規矩要了 72
  73. 73. Objective-C http://MobileDev.TW 4-2協定 Protocol •  類別間分享方法的清單 •  甲方:定義協定(宣告方法) •  乙方:採納協定(實作方法) 73
  74. 74. Objective-C http://MobileDev.TW 4-2-1.定義協定 @protocol 協定名稱 宣告方法 @end 74 例如,在NSObject.h中,定義了NSCopying協定
  75. 75. Objective-C http://MobileDev.TW 4-2-2.採納協定 •  要實作的類別,則稱為遵從(conform)或採納(adopt )該協定 •  在@interface後面加上協定 •  在@interface中不用再宣告協定中的方法,但在實 作區段中必須定義他們 75
  76. 76. Objective-C http://MobileDev.TW You should got it NOW •  Category的使用時機 •  Protocol如何定義 •  Protocol如何遵循 76
  77. 77. Objective-C http://MobileDev.TW 5.FRAMEWORK 原廠給的、外面來的,這些積木幫你省去很多麻煩 77
  78. 78. Objective-C http://MobileDev.TW 5-1.什麼是Framework •  Framework •  泛指能夠簡化開發程序的一堆類別、方法、函數與文 件的集合。 •  Foundation Framework •  提供一切基礎所需的framework,如數字、字串處理 、陣列、dictionary、日期時間、檔案系統等等。 •  Application Kit Framework •  用來開發互動的圖形化應用程式 •  提供文字、選單、工具列、表格等等。 78
  79. 79. Objective-C http://MobileDev.TW 5-2.Cocoa 與 Cocoa Touch •  Cocoa •  Foundation Framework •  Application Kit Framework •  Core Data •  Cocoa Touch •  Foundation Framework •  UIKit Framework •  Game Kit Framework •  iAD Framework •  Map Kit Framework 79
  80. 80. Objective-C http://MobileDev.TW 6.資料型態 ID 有些事情,時候未到,真的沒人知道 80
  81. 81. Objective-C http://MobileDev.TW 資料型態 id 使用id來宣告不確定型態的物件 MyClass *myObject1; id myObject2; 81
  82. 82. Objective-C http://MobileDev.TW id這麼好用,為什麼不全部宣告為id? •  宣告為特定資料形態者,稱之為靜態型別 •  int x=5; •  靜態型別在編譯期間,即會檢查被呼叫的方法,若 無該方法,此時就會提出警告 •  及早防範程式錯誤 •  增加程式的可讀性 82
  83. 83. Objective-C http://MobileDev.TW 7.星號與初始化 很多人常問,大家一起來看看 83
  84. 84. Objective-C http://MobileDev.TW Q1.什麼時候要用*號? •  Objective-C所有的物件都是透過指標的方式來找 到該位址,並進行存取。 •  而沒有使用指標的通常是C語言的原始型別(Primitive type) •  字元 char •  整數 int、short、long •  浮點數 float、double •  布林值 BOOL 84
  85. 85. Objective-C http://MobileDev.TW 在Objectiv-C中可以使用C的基本型別 直接拿來用 85 int someInteger = 42; float someFloatingPointNumber = 3.1415; double someDoublePrecisionFloatingPointNumber = 6.02214199e23; int someInteger = 42; someInteger++; // someInteger == 43 someInteger--; // someInteger == 42 someInteger *= 2; // someInteger == 84 所以也可以用C語言的operator
  86. 86. Objective-C http://MobileDev.TW Objectice-C本身也提供了額外的一些基本型別 •  BOOL •  NSInteger、NSUInteger、CGFloat 86
  87. 87. Objective-C http://MobileDev.TW 用C語言的struct來持有基本型別的值 用NSRange結構來持有一個字串的位置與長度 87 NSString *mainString = @This is a long string; NSRange substringRange = [mainString rangeOfString:@long]; typedef struct _NSRange { NSUInteger location; NSUInteger length; } NSRange; 位置:10 長度:4
  88. 88. Objective-C http://MobileDev.TW 物件也可以用來呈現基本型別的數值 用NSString物件來存放字串 88 NSString *firstString = [[NSString alloc] initWithCString:Hello World! encoding:NSUTF8StringEncoding]; NSString *secondString = [NSString stringWithCString:Hello World! encoding:NSUTF8StringEncoding]; NSString *thirdString = @Hello World!;
  89. 89. Objective-C http://MobileDev.TW 用NSNumber物件來持有各種基本型別的數值 char,double,float,int,long,short,….都可持有 89 NSNumber *magicNumber = [[NSNumber alloc] initWithInt:42]; NSNumber *unsignedNumber = [[NSNumber alloc] initWithUnsignedInt:42u]; NSNumber *longNumber = [[NSNumber alloc] initWithLong:42l]; NSNumber *boolNumber = [[NSNumber alloc] initWithBOOL:YES]; NSNumber *simpleFloat = [NSNumber numberWithFloat:3.14f]; NSNumber *betterDouble = [NSNumber numberWithDouble:3.1415926535]; NSNumber *someChar = [NSNumber numberWithChar:'T']; 也可從物件中取出基本型別的值餵給C語言的型別 int scalarMagic = [magicNumber intValue]; unsigned int scalarUnsigned = [unsignedNumber unsignedIntValue]; long scalarLong = [longNumber longValue]; BOOL scalarBool = [boolNumber boolValue]; float scalarSimpleFloat = [simpleFloat floatValue]; double scalarBetterDouble = [betterDouble doubleValue]; char scalarChar = [someChar charValue];
  90. 90. Objective-C http://MobileDev.TW 用NSNumber物件來持有各種基本型別的數值 90 當然也可從物件中取出基本型別的值, 餵給Objective-C語言的基本型別 NSInteger anInteger = 64; NSUInteger anUnsignedInteger = 100; NSNumber *firstInteger = [[NSNumber alloc] initWithInteger:anInteger]; NSNumber *secondInteger = [NSNumber numberWithUnsignedInteger:anUnsignedInteger]; NSInteger integerCheck = [firstInteger integerValue]; NSUInteger unsignedCheck = [secondInteger unsignedIntegerValue];
  91. 91. Objective-C http://MobileDev.TW Q2.什麼時候要alloc init? •  每一個物件基本上都需要,但是有些類別方法本身 已經包含有配置與初始化,初學者會誤以為沒有做 這個動作。 91
  92. 92. Objective-C http://MobileDev.TW 程式設計基礎 – 使用OBJECTIVE-C 凡事起頭難 92
  93. 93. Objective-C http://MobileDev.TW 變數 •  每一種資料的型態不同,需要的儲存空間也不同 •  常用的資料型態 •  C語言 •  int •  float •  char •  Objective-C語言 •  NSString •  NSInteger •  NSDate 93
  94. 94. Objective-C http://MobileDev.TW 常用的程式邏輯(1)如果 •  請撰寫一小段程式,讓使用者輸入姓名與性別 •  如果使用者是男生,請顯示:你好!XXX •  否則,請顯示:妳好!XXX 94
  95. 95. Objective-C http://MobileDev.TW 常用的程式邏輯(1)如果 95
  96. 96. Objective-C http://MobileDev.TW 常用的程式邏輯(1)如果 •  if…else if…else •  修改範例為: •  請使用者輸入性別:(男生 1 女生 2 不願透露 3) •  男生 – 你好 •  女生 – 妳好 •  不透露 – 哈囉 96
  97. 97. Objective-C http://MobileDev.TW 常用的程式邏輯(2)重複性 •  找到事物重複的規律,讓電腦幫你完成 •  在很久很久以前,有位勇士救了國王的女兒,國王想獎勵他, 就說,你可以提一個願望,我會滿足你。這位勇士對國王說: 我的要求很小,請您拿一個棋盤,在第1個格子裡放1粒米,在第 2個格子裡放2粒米,第3個格子裡放4粒米…. 以此類推,每到下 一個格子就增加一倍。直到將這六十四個格子全部放完。我的 要求就這樣。 國王聽了功臣的要求之後哈哈大笑:你的要求如 此簡單,太小看國王了,再提一個願望,勇士很謙虛地說:謝 謝國王,您能滿足我這個要求我就心滿意足了...... •  請問: •  第64個格子要放幾粒米? •  國王一共要給勇士幾粒米? 97
  98. 98. Objective-C http://MobileDev.TW 常用的程式邏輯(2)重複性 98
  99. 99. Objective-C http://MobileDev.TW 常用的程式邏輯(2)重複性 99

    Soyez le premier à commenter

    Identifiez-vous pour voir les commentaires

  • RayDan2

    Dec. 20, 2014
  • AdamHung2

    Dec. 20, 2014
  • hcciou

    Dec. 21, 2014
  • MingHsiuLee

    Dec. 21, 2014
  • salingerslin

    Dec. 22, 2014
  • ssuserfa30a5

    Jan. 26, 2015
  • KyleCheng

    Feb. 12, 2015
  • yadean

    Feb. 12, 2015
  • aldousw

    Mar. 10, 2015
  • inter008

    Mar. 10, 2015
  • gugwei

    Mar. 11, 2015
  • lintomlin

    Apr. 6, 2015
  • JamesLin31

    Apr. 22, 2015
  • HuangTsaiming

    Jul. 28, 2015
  • JasmitSahi

    Aug. 24, 2015
  • peysbuko

    Jan. 16, 2016
  • boyinarajesh

    May. 21, 2016

http://MobileDev.TW

Vues

Nombre de vues

1 965

Sur Slideshare

0

À partir des intégrations

0

Nombre d'intégrations

74

Actions

Téléchargements

0

Partages

0

Commentaires

0

Mentions J'aime

17

×