Upgrade to Pro — share decks privately, control downloads, hide ads and more …

iOS Objective-C Basic

Ryan Chung
September 29, 2014

iOS Objective-C Basic

Ryan Chung

September 29, 2014
Tweet

More Decks by Ryan Chung

Other Decks in Technology

Transcript

  1. Objective-C http://MobileDev.TW 大綱  1.  Hello Objective-C! Xcode環境認識 2.  Objective-C語法類別、物件與方法

    1)  從一個簡單的分數開始 2)  來寫一個計算機 3)  再論類別 3.  繼承的概念 4.  Category&Protocol  5.  Framework 6.  資料型態 id 7.  星號與初始化 2
  2. Objective-C http://MobileDev.TW You should got it NOW  •  Xcode可以製作哪些種類的應用程式

    •  如何查閱進一步解釋 •  如何跳至匯入程式碼的原始位置 •  如何使用NSLog顯示變數的值  16
  3. Objective-C http://MobileDev.TW 建立類別  •  建立一個運算分數的類別 •  裡面有分子、分母 •  有輸入分子的方法

    •  有輸入分母的方法 •  有輸出結果的方法 22 類別就像是生產工廠的運 作機制,建立了類別,就 可以根據這個類別,創造 出一個個的物件來使用。
  4. Objective-C http://MobileDev.TW Objective-C 術語小字典:iVar  •  實體變數(instance variable) •  簡稱

    iVar •  相當於一個類別中的屬性定義 25 就像是一個工廠的儲 存空間。 在設計類別時,需要 思考有哪些東西需要 一個儲存空間,這些 東西會被各個運作部 門所使用。
  5. Objective-C http://MobileDev.TW 2-2.來寫一個計算機!  •  建立一個計算機類別,裡面放一個iVar來儲存結果 •  跟結果相關的方法 •  設定結果

    •  清除結果 •  取出結果 •  計算用的方法 •  加法 •  減法 •  乘法 •  除法 35
  6. 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
  7. Objective-C http://MobileDev.TW 2-3-2.自動產生Setter與Getter  •  在Fraction.h中加入 51 •  在Fraction.m中加入 • 

    加了這兩句,就會自動產生了 •  Getter:numerator,denominator •  Setter:setNumerator,setDenominator
  8. Objective-C http://MobileDev.TW 2-3-2-1.自動產生Synthesize  •  開發環境版本:Xcode4.5+iOS6之後 •  建立@property後,自動產生@synthesize •  自動建立成

    @synthesize ivarName=_ivarName; •  在類別中,直接透過 _ivarName或self.ivarName 直接存取 •  在其他運作流程中,用objName.ivarName來存取 53
  9. Objective-C http://MobileDev.TW Dot Operator:可存可取  [myFraction numerator] is equal to

     myFraction.numerator 55 [myFraction setNumerator : 1] is equal to  myFraction.numerator=1
  10. 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
  11. 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
  12. Objective-C http://MobileDev.TW You should got it NOW  •  類別、物件與方法,想想工廠的運作

    •  什麼是iVar? iVar的存取方式的進化 •  自己寫同名方法 •  自動產生 •  自動產生Synthesize •  點運算子怎麼用 •  接收多個變數的方法怎麼寫、怎麼用? •  self關鍵字是什麼,什麼時機會用到? 63
  13. 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;
  14. Objective-C http://MobileDev.TW You should got it NOW  •  Category的使用時機

    •  Protocol如何定義 •  Protocol如何遵循 76
  15. Objective-C http://MobileDev.TW 5-1.什麼是Framework  •  Framework •  泛指能夠簡化開發程序的一堆類別、方法、函數與文 件的集合。 • 

    Foundation Framework •  提供一切基礎所需的framework,如數字、字串處理 、陣列、dictionary、日期時間、檔案系統等等。 •  Application Kit Framework •  用來開發互動的圖形化應用程式 •  提供文字、選單、工具列、表格等等。 78
  16. 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
  17. Objective-C http://MobileDev.TW id這麼好用,為什麼不全部宣告為id?  •  宣告為特定資料形態者,稱之為靜態型別 •  int x=5; • 

    靜態型別在編譯期間,即會檢查被呼叫的方法,若 無該方法,此時就會提出警告 •  及早防範程式錯誤 •  增加程式的可讀性 82
  18. 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
  19. 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
  20. 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!";
  21. 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];
  22. 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];