天天看點

objective-c入門(xcode helloworld程式 建立類)

一:objective-c簡介

Objective-C是進行iPhone軟體開發的語言 Objective-C語言是C語言的一個擴充集 Objective-C是一種面向對象的語言 大小寫敏感 程式語句必須以(;)結束 開發工具(Xcode) 二、第一個Objective-c程式

啟動 Xcode。初次啟動的時候,也許會彈出一個“Welcometo Xcode”的一個對話框,我們可以把它關掉。

然後是選擇螢幕上部菜單的“File->New Project”,出現了一個讓你選擇項目種類的對話框。你需要在對話框的左邊選擇“CommandLineUtility” ,然後在右邊選擇“FoundationTool”,然後選擇“Choose...”按鈕。輸入項目名稱“hello world",然後選擇save as

#import<Foundation/Foundation.h>
    int main (int argc, constchar * argv[])
    {
        NSAutoreleasePool * pool = [[NSAutoreleasePoolalloc] init];
        //----------------------------------------
        NSLog(@"Hello,iphone!");
        
        //----------------------------------------
        [pool drain];
        return 0;
    }
           

#import<Foundation/Foundation.h>

告訴編譯器導入Foundation架構中的Foundation.h主頭檔案;說到這裡,要說一下Cocoa: Cocoa包含兩個核心架構:Foundation架構和Appkit架構 CocoaTouch包含兩個架構:Foundation架構和UIKit架構 再說一下架構:所謂架構 ,就是一個集合,其中包含着頭檔案,庫等資源 檔案;每個架構 中均有一個主頭檔案,該頭檔案包含了架構 中各個 頭檔案,一但引入 了主頭檔案,就可以在自己的程式 裡使用任何在該架構 裡的類;這就是架構!

格式:int main(intargc, const char* argv[]) 每一個程式有且隻有一個main函數 表示程式将在何處開始執行。 return 0; 0:程式正常 非0:通常表示出現了一些問題(如:很可能無法找到程式所需的檔案)

NSAutoreleasePool*pool = [[NSAutoreleasePoolalloc]init];

//可以了解為在記憶體中開辟了一塊共用的記憶體空間

記憶體管理在IOS開發中的非常重要的

[pool drain];

//釋放共用的記憶體空間

NSLog(@"Hello,iphone!");

NSLog是Objective-C庫中的一個函數

作用:向控制台輸出文本内容

将顯示常量字元串,類似于printf函數,并且它會自動在文本後面添加'\n'。當然其中也可以使用轉義字元。例如還有:

NSLog(@"The sum of 50 and 25 is %i",sum);

//----------------------------------------

單行注釋:使用連續的斜杠(//) 多行注釋:使用結尾 不能嵌套使用 好處 比較清晰的指出該斷程式用意 有利于團隊合作,有利于後期的代碼維護

三、定義一個新類:

選擇File檔案裡New一個File檔案,在打開的對話框裡,選擇objective-c class;輸入類名為Test:

它會自動生成Test.h,Test.m檔案:.h是頭檔案,.m是objective-c的源檔案;

首先是test.h頭檔案代碼如下:

#import <Foundation/Foundation.h>

@interface Test : NSObject

@end
           

然後是test.m源檔案代碼如下:

#import "Test.h"

@implementation test

@end
           

@interface部分

描述類、類的資料成分以及類的方法

@的是指令符

@implementation部分

實作這些方法的實際代碼

@interface部分的一般格式:

@interface NewClassName : ParentClassName{

memberDeclarations;}

methoddeclarations;

@end

@implementation部分的一般格式:

@implementation NewClassName

methodDefinitions;

@end

它是以@interface開始,以@end結束!!!!@implementation也是這樣,以@end結束!!!;

類的命名規則:以字母或下劃線開頭,之後可以是任何字母,下劃線或者0~9數字組合,類名以大寫字母開頭,執行個體變量、對象以及方法的名稱以小寫字母開始 ;

這就是建立類;

四、聲明定義變量及方法

Test.h

@interface Test : NSObject{//屬性必須定義在這個大括号裡
    int intX;
    int intY;    
}
+(int) staticIntY;//屬于類,不屬于對象
-(void) print;//無參方法
-(void) setIntX:(int)n;//帶一個參數的方法
-(void) setIntY:(int)d;
-(void) setIntX:(int)n andSetIntY:(int)d;//多輸入參數的方法
-(int) intX;//get方法
-(int) intY;
@end
           

函數開頭的(-)号或者(+)号表示:

(-) 該方法是執行個體方法(對類的特定執行個體執行一些操作) ;(+)是類方法(即對類本身執行某些操作的方法,例如建立類的新執行個體)

函數的聲明示例:

-(void)setNumerator:(int)n第一個表示方法類型,傳回類型,接着是方法名,方法接受的參數,參數類型,參數名

注:如果不帶參數則不用使用“:”号,從程式中可以看出來

如果沒有指定任何傳回類型, 那麼預設是id類型, 所有的輸入參數預設也是id類型 (id類型可用來引用

任何類型的對象) 。

有多個參數的方法:

-/+ (return type) function_name : (parameter type) parameter1 otherParameter : (parameter_type) parameter2;

如果隻有一個參數,在: 後面聲明參數的類型和名稱;如果有多個參數的話,每個參數前面都要有一個:, 然後接着是參數類型和參數名稱。可是

Test.m檔案

@implementation Test
+(int)staticIntY{
    Y+=1;
    return Y;
}
-(void)print{
    NSLog(@"兩個數相加 的結果 為:%i",intX+intY);
}
-(void)setIntX:(int)n{
    intX=n;
}
-(void)setIntY:(int)d{
    intY=d;
}
-(void) setIntX:(int)n andSetIntY:(int)d{
    intX=n;
    intY=d;
}
-(int)intX{
    return intX;
}
-(int)intY{
    return intY;
}

@end
           

這個實作類沒有什麼好說的,相信大家都能看懂,就隻是實作方法;

然後就是在main.m檔案裡測試了:

Test *test=[[Test alloc]init];//對象的聲明 和初始化,其中alloc為對象 申請了記憶體空間,init則完成 了對象 的初始化。在完成 了對象 聲明 和初始化以後,就可以調用對象 的方法了。
    [test setIntX:1];//方法調用
    [test setIntY:1];
    [test print];//無參調用
    [test setIntX:2 andSetIntY:2];//多參方法調用
    [test print];
           

建立一個Test對象:

Test *test=[[Test alloc]init];

一定要注意在資料 類型的右邊有一個星号。所有的objective-c對象變量都是指針類型的。等号右邊的語句是建立 一個對象 ,這是一個嵌套 的方法調用。第一個調用的是Test的alloc方法。這是一個相對對比較 底層的調用 ,因為該方法其實是為test變量申請一個内容 空間,第二個調用的是新建立 對象 的init方法,這個init方法用于初始化變量值。init實作了比較常用的設定,比如設定執行個體變量的初始值。

後面兩句是調用方法:

【對象名 方法名:實參】;有參調用,如果是無參的就沒有冒号及後面的,如果是多參的:【對象名 方法名:實參方法名:實參】。

注:建立一個新對象,都要請求配置設定記憶體,在完成對該對象的操作時,必須釋放其所用的記憶體空間

i Phone平台不支援垃圾回收機制外部要通路執行個體變量需要通過類的方法來檢索其值,不能直接通路

在Objective-C當中,所有的對象都可以使用id來進行區分。我們知道一個類僅僅是一些資料外加上操作這些資料的代碼 ,是以id實際上是指向資料結構的一個指針而已,相當于void*。

總結一下對象聲明的文法:

類名 *test,*test1;

定義 了test和test1是指定類的對象。要注意的是,這隻是定義了一個指針變量,尚未為它所包含的資料獲得記憶體空間。在調用alloc方法之後,這些對象 才獲得(配置設定)空間。

輸出結果為:

2012-03-24 11:24:00.522 HelloWorld[652:707]兩個數相加的結果為:2

2012-03-24 11:24:00.612 HelloWorld[652:707]兩個數相加的結果為:4

轉載,請注明原處!!!

轉載,請注明原處!!!

繼續閱讀