上課筆記(三) – Operation、Delegation、基本類別介紹

Operation

  1. 取得class資料的相關變數
  2. 確認兩個變數指向同一個記憶體位置

    確認兩個實體的值相同
  3. 呼叫物件的描述,回傳字串 [obj description];//等於NSLog(@”%@”,obj);

Delegation

  1. 定義:物件要完成某件行為時利用別人定義好的某項功能來完成。
    所以專案第一個被呼叫的應該是Delegate裡的
  2. xcode專案的main.m

基本類別

  1. NSObject:最基本的物件
    [obj className];//自我檢視
    [obj isEqual:obj2]//物件比較
  2. NSString
  3. NSMutableString:可在原本字串之間插字串(用insertString)
  4. Set:無順序性的集合,資料有惟一性(物件要比較是否相同須覆寫isEqual和hash)
    NSMutableSet:queue的概念,用在List把移出畫面的東西暫存。
    NSOrderedSet:依照加入的順序排(比起NSMutableSet)
    相關網頁:
    http://stackoverflow.com/questions/6545722/help-with-isequals-and-hash-in-iphone
  5. Array:有順序性的集合,當資料從中間刪除,剩的index會自動往前補。
    NSArray: 不可新增修改的array。
    NSMutableArray:可新增修改,保證是0,1,2,3的index不會跳號。
  6. Dictionary:存在key-value型式資料的集合
    NSDictionaryNSMutableDictionary
  7. 走訪所有元素的寫法
  8. NSNumber:才可以丟進set或array裡
  9. NSNull:為了要丟進array裡面,因舊式寫法array宣告nil代表尾端,所以要丟空值要改丟NSNull
  10. Scalar:把物件當陣列般存取。例:

    要注意的是,如果我們呼叫car[1]代表執行下面兩個函數而不代表真的是array

    如果果們呼叫car[@”dict”]則是執行下面兩個函數

上課筆記(二) – Objective-C語言介紹、物件存取

Objective-C語言

  1. @代表物件
    [@”Hello world”] => 方括弧是存取物件裡的方法
    例:
  2. Class:類別
    Object:物件及實體,包括
    (a) 名字(Name)
    (b) 屬性(State):field, attribute, member, 屬性, 狀態, 成員
    (c) 行為(Behavior):method, action, member function
    Message:使用方來傳遞訊息。例:NSString的StringWithString
    螢幕快照 2013-08-02 下午5.49.59
    PS: 若在#import <Foundation/Fundation.h>下面加上@Class Car;,代表把Car當作class,在.m檔才import。
  3. self(存取自己),只能用在implementation的『{』至『@end』之間。
  4. variable宣告:
  5. 宣告時,前方的+或-代表是否要透過init alloc來回傳物件。
    +號是不用透過init alloc傳回物件
  6. 要公開(public)的放在.h,不公開的放在.m
  7. NSStrung * name = [[NSString alloc] init];
    等同於 NSString * name = [NSString new];
    =>配置記憶體與初始化是產生物件後的第一個動作
  8. Obj C可以使用id去動態新增method,所有obj c的語言都會被編譯成c語言。

Message Syntax

  1. 『物件.xxx』所存取的不是屬性,而是方法。是存取物件裡面的getter和setter。
  2. 自動產生getter和setter
  3. 如果interface和implementation在同個檔案,在interface裡用@property,在implementation裡需加上@synthesize

    若分開為.h及.m檔,則.h檔宣告後,.m檔裡不用寫就會自動產生。
  4. 動態型別 – id:任何繼承NS Object的物件型別,宣告方式如下

    用法例子:在apple在view事件觸發時要接收事件,會希望任何class都可以去接收該事件都可以。
    當不知道是誰接收時,就會用id去宣告
  5. 空指標nil,物件型別的空值,等同於NULL。若將nil丟給方法則會像石沉大海一樣什麼都不發生也不會有error。=>經指正會產生空值error
  6. Obj C的BOOL是傳YES(true)及NO(false)。
  7. 要判斷現在的class裡是否有某個函數要用Selector,回傳的型別是SEL。使用範例如下

    Selectors are generally passed to delegate methods and to callbacks to specify which method should be called on a specific object during a callback. For instance, when you create a timer, the callback method is specifically defined as:

    So when you schedule the timer you would use @selector to specify which method on your object will actually be responsible for the callback:

    In this case you are specifying that the object obj be messaged with myTimerCallback every 30 seconds.
    假如一個function在該做的事完成後要執行selector callback,可以類似下面這樣寫

    來源:http://stackoverflow.com/questions/297680/how-do-sel-and-selector-work-in-iphone-sdk
  8. 判斷class是否有該函數使用

上課筆記(一) – 專案運作流程、c語言概論、指標與物件

課程資訊

  1. 上課教師:潘聖文 Michael Pan ( scentsome@gmail.com) > 認真好老師推!
  2. 課程名稱:資策會IPhone應用軟體開發入門篇

運作流程

  1. main function為固定進入點
  2. 在iphone app開發裡面,一個一整頁的畫面是Scene,會有對應一個Controller
  3. 切換不同Scene的叫做View Controller,跳出如輸入框或選取框的這種(非整頁切換),則不需View Controller
  4. Navigation Controller是只有上面的Bar(用以控制頁面切換),會將View Controller塞進裡面。
  5. 所有Object特有的類別都會加上NS開頭(因為是某個縮寫為NS的公司開發的)
  6. Objective-C可以在執行時動態產生Code。
  7. 整個Design Flow圖如下
    螢幕快照 2013-08-02 下午4.18.20

開始之前

    1. 變數:代表記憶體的編號,型別決定占記憶體多大的位置,變數則是存放記憶體起始位置。
    2. Function宣告
    3. ios程式的基本組成是由三個frameworks:
      (a) UIKit:給特殊樣式的ui
      (b) Core Graphics:畫圖
      (c) Foundation:C和OBJ C用的
      ps:要自己加可以按Target=>Summary=>Linked Frameworks and Libraries=>+
    4. 副檔名:表頭檔.h和內容檔.m及.mm(要用view一定要用.m;要像視訊則可用.mm)

Pointer & Object 指標與物件

  1. Pointer在C裡面代表存放的是一個記憶體位置
  2. Struct是型別,也就是class(類別)

  3. Function是存放動作,其記憶體是存在stack裡
  4. 所以Objective C程式的記憶體位置配置這樣的
    螢幕快照 2013-08-02 下午5.01.06
    Stack的部份是不用管理的,因為用完就沒了,而在Object C裡需要去做記憶體管理的部份則為Heap的區塊。
    所以當我們在Obj C裡宣告了某個物件,必需用
  5. Static variable(靜態變數),會放在Data Segment。
  6. 所有的View Object都會對應到一個型別(Custom Class那邊去設定)
    螢幕快照 2013-08-02 下午5.17.09