標籤:objective-c ios開發 物件導向 class 執行個體
重開發人員的勞動成果,請勿轉載
物件導向程式設計的一些關鍵概念,主要關注Objective-C定義類相關的文法。
OC物件導向方面的概念和其它語言差不多。相比其他語言更接近C++。
對象就是一個物件。物件導向的程式設計可以看成一個物件和你想對它做的事情。
對象(名詞)----實現(動詞),先定義類(Class),再定義方法(Method)。
C語言是典型的面向過程性語言。
在C語言中,通常是先考慮要實現什麼,然後才關注對象,這幾乎總是與物件導向的思考過程相反。
實現(動詞)----對象(名詞),先定義函數(Function),再定義模組(Module)。
類的獨特存在就是一個執行個體,對執行個體執行的操作稱為方法。
在某些情況下,方法可以應用於類的執行個體或類本身。
對象使用方法可以影響對象的狀態。
關鍵概念:對象是類的獨特表示,每個對象都包含一些通常對該對象來說是私人的資訊(資料)。方法提供訪問和改變這些資料的手段。
Objective-C採用特定的文法對類和執行個體應用方法:
[ ClassOrInstance method];
請求一個類或執行個體來執行某個操作時,就是向它發送一條訊息,訊息的接收者稱為Receiver。所以,可以用另外一種方式描述:
[ receiver message];
Objective-C的Method操作執行,一種理解是發送訊息,另外一種是方法調用。
前一種更貼近OC的思想。
程式在邏輯上分為下面3個部分:
@interface
@implementation
program
@interface部分用於描述類和類的方法;
@implementation部分用於描述資料(類對象的執行個體變數儲存的資料),並實現在介面中聲明方法的實際代碼;
program部分的程式碼實現了程式的預期目的。
@interface部分一般格式如下:
@interface NewClassName: ParentClassName
propertyAndMethodDeclarations;
@end
按照約定,類名以大寫字母開頭。
執行個體變數、對象以及方法的名稱,通常以小寫字母開頭。
確定名稱時,要遵循找到能反映變數或對象使用意圖的名稱。
程式具有更強的自解釋性(Self-explanatory)
制定名稱的規則相當簡單:名稱必須以字母或底線(_)開頭,之後可以使任何大小寫字母、底線或者數位組合。
另外像$空格等都是非法,記住不能數字開頭、不能使用保留字。
再次強調,Objective-C是大小寫敏感的。sum、Sum、SUM均表示不同的變數。
類或執行個體方法,開頭為負號(-)表示執行個體方法,正號(+)表示類方法。
傳回型別放在開頭的負號或正號之後的圓括弧中。
有參數時,在方法名後加冒號(:),再加上參數類型和參數名。
具體的如下例所示:
-(int) currentAge;
-(void) print;
-(void) setNumber: (int) n;
方法類型 (傳回型別) 方法名稱 方法有參數 參數類型 參數名稱
@implementation部分的一般格式如下:
@inplementation NewClassName
{
memberDeclarations;
}
methodDefinitions;
@end
需要注意的是:使用@synthesize指令能讓編譯器自動為你產生一些方法。
alloc是allocate的縮寫。如果向某個類發送alloc訊息,便獲得該類的新執行個體。
這個alloc方法繼承自父類。alloc方法保證對象的所有執行個體都變成初始狀態。
當然想要適當的方法時,必須重新初始化,調用init方法。
經常地情況是把alloc和init合在一起,或者直接使用new方法。
例如:
Fraction *myFraction;myFraction = [Fraction alloc];//類方法myFraction = [myFraction init];//執行個體方法Fraction *myFraction = [[Fraction alloc] init];//變形平板Fraction *myFraction = [Fraction new];//類方法,new包含alloc和init
記住,方法執行的上下文環境就是接收到訊息的對象。
取值方法(get)和賦值方法統(set)稱為存取方法(accessor)。
這就是資料封裝的原則,通過使用方法來訪問對“外界”隱藏的資料。
使用一個類的程式結束本章:
//// 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;}
Objective-C之成魔之路【3-類、對象和方法】