您好,登錄后才能下訂單哦!
郝萌主傾心貢獻,尊重作者的勞動成果,請勿轉(zhuǎn)載。
如果文章對您有所幫助,歡迎給作者捐贈,支持郝萌主,捐贈數(shù)額隨意,重在心意^_^
我要捐贈: 點擊捐贈
Cocos2d-X×××:點我傳送
Objective-C作為一種面向?qū)ο蟮木幊陶Z言, 具有面向?qū)ο?/span>的基本特征,
即: 封裝、 繼承和多態(tài)。
主要介紹ObjectiveC中有關(guān)面向?qū)ο蠡靖拍睿?類、 對象、 方法和屬性等。
也就是面向?qū)ο蟪绦蛟O(shè)計的一些關(guān)鍵概念,主要關(guān)注Objective-C定義類相關(guān)的語法。
OC面向?qū)ο蠓矫娴母拍詈推渌Z言差不多。相比其他語言更接近C++。
對象就是一個物件。面向?qū)ο蟮某绦蛟O(shè)計可以看成一個物件和你想對它做的事情。
對象(名詞)----實現(xiàn)(動詞),先定義類(Class),再定義方法(Method)。
C語言是典型的面向過程性語言。
在C語言中,通常是先考慮要實現(xiàn)什么,然后才關(guān)注對象,這幾乎總是與面向?qū)ο蟮乃伎歼^程相反。
實現(xiàn)(動詞)----對象(名詞),先定義函數(shù)(Function),再定義模塊(Module)。
類的獨特存在就是一個實例,對實例執(zhí)行的操作稱為方法。
在某些情況下,方法可以應(yīng)用于類的實例或類本身。
對象使用方法可以影響對象的狀態(tài)。
關(guān)鍵概念:對象是類的獨特表示,每個對象都包含一些通常對該對象來說是私有的信息(數(shù)據(jù))。方法提供訪問和改變這些數(shù)據(jù)的手段。
Objective-C采用特定的語法對類和實例應(yīng)用方法:
[ ClassOrInstance method];
請求一個類或?qū)嵗齺韴?zhí)行某個操作時,就是向它發(fā)送一條消息,消息的接收者稱為Receiver。所以,可以用另外一種方式描述:
[ receiver message];
Objective-C的Method操作執(zhí)行,一種理解是發(fā)送消息,另外一種是方法調(diào)用。
前一種更貼近OC的思想。
同樣的,程序在邏輯上就分為下面3個部分:
@interface
@implementation
program
接口部分
@interface部分用于描述類和類的方法;
@implementation部分用于描述數(shù)據(jù)(類對象的實例變量存儲的數(shù)據(jù)),并實現(xiàn)在接口中聲明方法的實際代碼;
主要定義了類名 、 繼承的父類、 實現(xiàn)的協(xié)議、 成員變量和方法等信息。
舉例如下:
program部分的程序代碼實現(xiàn)了程序的預(yù)期目的。
@interface部分一般格式如下:
@interface NewClassName: ParentClassName
propertyAndMethodDeclarations;
@end
按照約定,類名以大寫字母開頭。
實例變量、對象以及方法的名稱,通常以小寫字母開頭。
確定名稱時,要遵循找到能反映變量或?qū)ο笫褂靡鈭D的名稱。
程序具有更強的自解釋性(Self-explanatory)
制定名稱的規(guī)則相當(dāng)簡單:名稱必須以字母或下劃線(_)開頭,
之后可以使任何大小寫字母、下劃線或者數(shù)字的組合。
另外像$空格等都是非法,記住不能數(shù)字開頭、不能使用保留字。
再次強調(diào),Objective-C是大小寫敏感的。sum、Sum、SUM均表示不同的變量。
@implementation部分的一般格式如下:
@inplementation NewClassName
{
memberDeclarations;
}
methodDefinitions;
@end
需要注意的是:使用@synthesize指令能讓編譯器自動為你生成一些方法。
舉例如下:
接口和實現(xiàn)的要求:
接口文件包含類的公開信息,即能夠與這個類的使用者共享一些信息。
另一方面,實現(xiàn)部分包含的是私有信息,即實例變量和代碼。
類或?qū)嵗椒ǎ_頭為負號(-)表示實例方法,正號(+)表示類方法。
返回類型放在開頭的負號或正號之后的圓括號中。
有參數(shù)時,在方法名后加冒號(:),再加上參數(shù)類型和參數(shù)名。
具體的如下例所示:
-(int) currentAge;
-(void) print;
-(void) setNumber: (int) n;
方法類型 (返回類型) 方法名稱 方法有參數(shù) 參數(shù)類型 參數(shù)名稱
如果向某個類發(fā)送alloc消息,便獲得該類的新實例。
這個alloc方法繼承自父類。alloc方法保證對象的所有實例都變成初始狀態(tài)。
當(dāng)然想要適當(dāng)?shù)姆椒〞r,必須重新初始化,調(diào)用init方法。
經(jīng)常地情況是把alloc和init合在一起,或者直接使用new方法。
例如:
Fraction *myFraction; myFraction = [Fraction alloc];//類方法 myFraction = [myFraction init];//實例方法 Fraction *myFraction = [[Fraction alloc] init];//二合一 Fraction *myFraction = [Fraction new];//類方法,new包含alloc和init
記住,方法執(zhí)行的上下文環(huán)境就是接收到消息的對象。
取值方法(get)和賦值方法統(tǒng)(set)稱為訪問方法(accessor)。
這就是數(shù)據(jù)封裝的原則,通過使用方法來訪問對“外界”隱藏的數(shù)據(jù)。
使用一個類的程序結(jié)束本章:
// // main.m // 3_2_class_object_method // // Created by haomengzhu on 14-11-01. // Copyright (c) 2014年 haomengzhu. All rights reserved. // #import <Foundation/Foundation.h> //-------- @interface section ---------- @interface Fraction: NSObject -(void) print; -(void) setNumerator: (int) n; -(void) setDenominator: (int) d; @end //-------- @implementation section ---------- @implementation Fraction { int numerator; int denominator; } -(void) print { NSLog(@"%i/%i", numerator, denominator); } -(void) setNumerator:(int)n { numerator = n; } -(void) setDenominator:(int)d { denominator = d; } @end //-------- program section ---------- int main(int argc, const char * argv[]) { @autoreleasepool { Fraction *myFraction; // new object myFraction = [Fraction alloc]; myFraction = [myFraction init]; // set [myFraction setNumerator: 1]; [myFraction setDenominator: 3]; // print all NSLog(@"Hello, World!"); [myFraction print]; } return 0; }
最后再來說說OC中的方法:
關(guān)于方法:
在編寫新方法時,省略參數(shù)名不是一種好的編程風(fēng)格,因為它是程序很難讀懂并且很不直觀,
特別是當(dāng)使用的方法參數(shù)特別重要時,更是如此。
舉例如下:
定義了Fraction類以及新方法:
-(void)setTo:(int)n over:(int)d;
注意下面的使用方式:
[aFraction set:1 :3]這是不好的
[aFraction set:1 over:3]這是好的
再添加新方法:
- (void)add:(Fraction *) f;
這條語句說明add:方法的參數(shù)是Fraction類對象的一個引用。
星號是必須的,所以聲明(Fraction) f是不正確的。
局部變量:
局部變量是基本的C數(shù)據(jù)類型,并沒有默認的初始值,所以在使用前要先賦值。
局部對象變量默認初始化為nil。
和實例變量不同(它們在多次方法調(diào)用時保持自己的值),這些局部變量沒有記憶力。
也就是說,當(dāng)方法返回時,這些變量的值都消失了。
每次調(diào)用方法時,該方法中的局部變量都使用變量聲明重新初始化一次。
方法的參數(shù):
方法的參數(shù)名也是局部變量。執(zhí)行方法時,通過方法傳遞的任何參數(shù)都被復(fù)制到局部變量中。因為方法使用參數(shù)的副本,所以不能改變通過方法傳遞的原值。這一點很重要。
另外,如果參數(shù)是對象,可以更改其中的實例變量值。當(dāng)你傳遞一個對象作為參數(shù)時,實際上是傳遞了一個數(shù)據(jù)存儲位置的引用。正因為如此,你才能夠修改這些數(shù)據(jù)。
static關(guān)鍵字:
在變量聲明前加上關(guān)鍵字static,可以使局部變量保留多次調(diào)用一個方法所得的值。
和其它基本數(shù)據(jù)類型的局部變量不同。
靜態(tài)變量的初始值為0。
此外,它們只在程序開始執(zhí)行時初始化一次,并且在多次調(diào)用方法時保存這些數(shù)值。
記住:只能在定義靜態(tài)變量和局部變量的方法中訪問這些變量。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。