標籤:ar io os 使用 sp strong on 檔案 資料
一: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
Objective-C]入門 (xcode helloworld程式 建立類