洪小瑤學IOS(一):準備起航 筆記

來源:互聯網
上載者:User

做flash開發一枚,因為ANE等各種發展問題,決定再投資自己學習IOS開發。

 

IOS開發,目的其一:ANE,目的其二:興趣。

 

資料準備:  也準備了英文版本,怕臨時翻譯問題。

裝置:apple air  iphone 4s   ipad2  各一台。

 

 

 

 

Objective-C基礎教程1-6章節

ective-C基礎教程1-6章後,對一些東西的筆記,並不是完整的教程,只是類似拾遺,將一些不同的,不熟悉的東西記下來

一切都源於Hello World 恒古不變的定律,熟悉一門語言結構最快也就是這個萬能的程式了,Objective-C副檔名為.m(之後書中也有提到.mm就是C++風格)

 

Objective-c代碼  
  1. #import <Foundation/Foundation.h>  
  2. int main(int argc, const char *argv[]){  
  3.     NSLog(@"Hello Objective-C");  
  4.     return (0);  
  5. }  

 

其中NSLog方法是Objective-C專屬的一種類型,所有cocoa的對象都被冠以了NS首碼,作為區分。傳入的參數@""表示字串作為NSString被處理,程式其餘部分和C類似,#import的含義也不言而喻

布爾值

Objective-C中的布爾變數有些許小的不同,參數類型為BOOL,值為YES/NO,其中YES為1,NO為0,佔8位

需要注意的是,如果將一個int,short這樣的值賦給BOOL,只有低位位元組會發揮作用,這是特別要注意的,因為這意味著,並不是傳統認為的,非零即為true

Objective-C中有一種特有的文法:[對象 操作] 這在之後會一直看到

關於Objective-C中的OOP

@interface

 

 

Objective-c代碼  
  1. @interface Circle:NSObject  
  2. {  
  3.     ShapeColor color;  
  4.     ShapeRect bounds;  
  5. }  
  6. -(void) setFillColor: (ShapeColor) color;  
  7. -(void) setBounds: (ShapeRect) bounds;  
  8. -(void) draw;  
  9. @end  

 

以上就是標準的一個@interface定義,應該很好理解,Circle含有2個變數color,bounds,擁有3個方法

特別注意方法的申明方式 

(void) 表示傳回型別 之後是方法名及參數

draw方法不含參數 也不用:

對於多個參數的方法申明

-(void) setTire: (Tire *) tire atIndex:(int) index;(這裡的第二個參數看起來有些奇怪,但是在之後調用方法的過程中,atIndex會被用到)

Objective-C的方法調用使用了一種被稱為中綴符的東西

看一下分別調用無參,1參和多參的文法

 

Objective-c代碼  
  1. [circle draw];  
  2. [circle setFillColor:kRedColor];  
  3. [car setTire:tire atIndex:2];<span> </span>  

 

@implementation

與名字相同,實現,就是對@interface所申明內容的具體實現

 

Objective-c代碼  
  1. @implementation  
  2. -(void) setFillColor:(ShapeColor c)  
  3. {  
  4.     color=c;  
  5. }  
  6. @end  

 

這裡的color=c其實就相當於self.color=c(這裡我又要做類比了,目前的認識self就相當於java中的this指標)

有了@interface和@implementation之後,我們對一個類(對象)的定義就算完成,那麼如何執行個體化一個對象

 

Objective-c代碼  
  1. id shapes[3];  
  2. shapes[0]=[Circle new];  
  3. [shpaes[0] setBounds:rect];  
  4. ...  

 

這裡又看到一個新的東西id,它是一種指向某個對象的指標,目前為止只是看到這一種用法,也沒有太多認識,簡單的被我理解成了索引

之後看到了new對象的方法[Circle new],再之後是調用對象的方法設定具體的參數

繼承

 

Objective-c代碼  
  1. @interface Circle:Shape  

 

很簡單的方法,Objective-C在繼承規則上於java,C#無異,不允許多重繼承,不過既然有介面(或者應該叫協議),那麼自然同java一樣,達到相同的目的自然不難,同樣的,子類可以調用父類的方法,通過super,比如[super setColor:c];

Ojbective-C中的空值為nil

接下來 來看一個Car是被如何自動構建的

 

Objective-c代碼  
  1. @implementation Car  
  2. -(id) init  
  3. {  
  4.     if(self=[super init]){  
  5.         engine=[Engine new];  
  6.         ...  
  7.     }  
  8.     return (self);  
  9. }  

 

這一段有些理解不能,在書中的注釋中說到,這裡指如果超類可以完成所需的一次性初始化,需要調用[super init]。init方法的傳回值id描述了倍初始化的對象。將[super init]的結果賦給self是Objective-C的標準慣例。

Objective-C中一樣有getter/setter方法,但是在命名規則上需要注意

 

Objective-c代碼  
  1. -(Engine *)engine;  
  2. -(void) setEngine: (Engine *) engine;  

 

在set方法中 依然採取setXXX的方式 但是get方法則直接採用XXX 而非getXXX,以免混淆

拆分

一般將@interface部分放入.h檔案中

 

Objective-c代碼  
  1. #import <Cocoa/Cocoa.h>  
  2. @interface Tire:NSObject  
  3. @end  

 

將其他部分放在.m中,在.m中記得引入該標頭檔

#import "Tire.h"

import下<>代表系統標頭檔 ""代表本地標頭檔

關鍵詞@class 告訴編譯器此處是一個類,還需要通過指標進行傳遞

 

Objective-c代碼  
  1. @class Tire  
  2. @class Engine  
  3. ...  
  4. Engine *engine  

注意這只有在通過指標指向其他類的情況下可用,減少編譯器負擔,在繼承的情況下不可用,因為他需要瞭解超類的資訊

 

 

推薦oc視頻教程:http://www.youku.com/playlist_show/id_4545842.html

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.