標籤:
本系列的文章主要來自於個人在學習前鋒教育-歐陽堅老師的iOS開發教程之OC語言教學視頻所做的筆記,邊看視頻,邊記錄課程知識點。建議大家先過一遍視頻,在看視頻的過程中記錄知識點關鍵字,把把握重點,然後再將零散的知識點整理出來。這樣的學習方法會帶來更多的收穫,同時要多做練習,按照思路,默寫、改寫代碼。在這裡,感謝歐陽堅老師,學習你的課程使我走上了ios的開發之路。
一定要明確一個要從事的方向,要不然就會感到迷茫。學習ios開發,並且從事ios開發這個行業,這就是我的選擇。看到我的部落格系列文章,其中大多是關於C++、Qt、Linux網路編程、OpenGL、Unity3D等方面。從表面上看和ios開發似乎沒有多少關聯,但是有了這些方面的學習經驗給我帶了一定的基礎。ios開發主要用oc和swift語言,而oc是從事ios開發的基礎。眾所周知,oc(objective-c)即物件導向的C,在C語言的基礎上增加了物件導向的機制和記憶體管理這一對翅膀,使得OC在做ios開發如虎添翼。
本系列文章僅供個人學習和分享給志同道合的猿友,不存在商業用途。
OC是一門物件導向的語言,既然是物件導向就少補了類和對象。我們知道在C++中物件導向的三大機制:繼承、封裝、多態,這在OC中也同樣具備。下面就具體說一下OC中的類和對象。
類的定義
類是由屬性和方法組成的,屬性工作表示類的特徵,方法表示類的動作。
類的定義格式
OC中的類定義和C++中的類定義有些不同,在OC中類的標頭檔為***.h,而源檔案卻是以.m為尾碼的檔案-***.m。
介面在標頭檔中:
@interface 類名:基類名稱{ //屬性名稱}//這裡不加";"號 //方法聲明@end//聲明結束
類名首字母需要大寫,NSObject是OC所有類的基類,介面中只包含方法的聲明,方法有類方法和執行個體方法。
實現在源檔案中:
@implementation 類名//方法實現@end
類的存取權限
有三種存取權限:@public,@private,@protected。屬性預設的許可權是保護類型,方法預設的許可權是公有類型。
OC中的建構函式以initWith***開頭,主要做一些初始化工作,解構函式為dealloc,如果自己寫類沒有定義,系統會自動提供一個預設的建構函式和解構函式。
舉個例子說明一下,如下代碼:
-(id) init{ self = [super init]; //使用super父類對象,self表示本類對象 if(self){ NSLog(@“在建構函式中name %@ age%d %s”,_name,_age,_FUNCTION_); } return self;}-(id)initWithName:(NSString *)newName{ }-(id)initWithName:(NSString*)newName withAge:(int) newAge{}-(void)dealloc{ //解構函式在對象完全消失的時候調用 //對象銷毀時調用,對象計數器=0 //dealloc不要手動調用[person dealloc],應該調用[person release]; //release銷毀對象,release計數器減一,減到0就自動調用dealloc。 [super dealloc];}
在OC中也可以使用"obj->arrt"的形式訪問和設定屬性欄位,但前提是該欄位必須被聲明為公有類型。但是這種方式不建議使用。
#import<Foundation/Foundation.h>@interface Person:NSObject{@public int _age; NSString *_name;}-(void) setAge:(int)age;-(int)getAge;@end@implementation Person-(void) setAge (int)age{ _age = age;}-(int)getAge{ return _age;}@endint main(){ @autoreleasepool{ Person *person = [[Person alloc] init]; person->age = 20; person->name = @”小紅”; } return 0;}
Person *person = [[Person alloc] init]就是person指向的對象分配了記憶體空間,並進行了初始化。也可以用Person *person = [Person new],OC中也支援new運算子。因為age、name欄位被聲明為public類型,所以可以使用指標調用的方式來設定對象的屬性。
參數標籤
-(Person *)init:(int) newID:(int) newAge;//沒有使用參數標籤-(Person *)initWithID:(int) newID andAge:(int) newAge;//使用參數標籤
第一個參數可以不帶標籤,從第二個參數開始可以帶標籤。現在的方法名為:initWithID:andAge:,參數標籤可以提高方法名的可讀性,同時還可以用於方法的重載。
方法重載
在OC中,方法的重載不像C++那樣可以通過,參數類型,參數個數進行區分了。OC中不是嚴格的函數重載。
//方法名相同並且參數個數相同但參數類型不同,在OC中構不成方法重載-(int) doSth:(int) x;-(int) doSth:(float) x;-(int) doSth:(int) x:(int) y;-(int) doSth:(float) x:(float) y;//用參數標籤可以構成方法重載-(int) doSth:(int) x:(int) y;-(int) doSth:(float) x andY:(float) y;
ios開發之OC基礎-類和對象