Objective-c基礎(chǔ)知識學(xué)習(xí)筆記(一)
一直有記錄筆記的習(xí)慣,但很久沒分享一些東西了,正好上半年開始學(xué)習(xí)IOS了,現(xiàn)在有空寫點。因開發(fā)需要,公司特意為我們配置了幾臺新MAC,還讓我們自學(xué)了2周時間,就正式進入開發(fā)了。現(xiàn)在將自己了解的一些基礎(chǔ)知識分享一下。
一、開發(fā)工具
svn管理工具:versions(備注:個人感覺這個工具不是很好用,經(jīng)常操作緩慢而且卡頓)、開發(fā)工具:xcode
二、IOS系統(tǒng)架構(gòu)
IOS是基于UNIX內(nèi)核,Android是基于Linux內(nèi)核。
IOS的系統(tǒng)架構(gòu)分為四個層次,從下到上依次是:核心操作系統(tǒng)層(Core OS layer)、核心服務(wù)層(Core Services layer)、媒體層(Media layer)和可觸摸層(Cocoa Touch layer)。
1、Core OS是位于iOS系統(tǒng)架構(gòu)最下面的一層,是核心操作系統(tǒng)層,它包括內(nèi)存管理、文件系統(tǒng)、電源管理以及一些其他的操作系統(tǒng)任務(wù),可以直接和硬件設(shè)備進行交互。作為app開發(fā)者不需要與這一層打交道。
2、Core Services是核心服務(wù)層,可以通過它來訪問iOS的一些服務(wù)。
3、Media是媒體層,通過它我們可以在應(yīng)用程序中使用各種媒體文件,進行音頻與視頻的錄制,圖形的繪制,以及制作基礎(chǔ)的動畫效果。
4、Cocoa Touch是可觸摸層,這一層為我們的應(yīng)用程序開發(fā)提供了各種有用的框架,并且大部分與用戶界面有關(guān),本質(zhì)上來說它負責用戶在iOS設(shè)備上的觸摸交互操作。
三、重要后綴說明
.h后綴的文件指頭文件,描述類、類的數(shù)據(jù)成分以及類的方法,相當于接口。
.m后綴的文件是實現(xiàn)文件(源文件)
.xib后綴文件,是interface builder文件,存放應(yīng)用程序的用戶界面(UI)
四、基礎(chǔ)語法
Objective c是面向?qū)ο蟮?/p>
1、#import(引入頭文件)語法
eg:#import<Foundation/Foundation.sh>
#import"SelfClass.h"
@classSelfClass
備注:<>只在系統(tǒng)文件中查找,””先在本地查找,沒找到則到系統(tǒng)文件中查找,import可自動防止同一個文件被導(dǎo)入多次。實例變量類型一般用@class引入,這個可以縮短編譯時間,一般用在interface中,里面的方法和變量不可用。
2、字符串NSString
@"字符串"
3、BOOL布爾類型
有YES和NO兩個值,備注:大于0的數(shù)不一定是YES。
4、控制臺輸出NSLog()
%@輸出NSString等對象的值
五、類的定義與實現(xiàn)
1、@interface用于定義接口類
接口一般在.h文件(頭文件)中定義,用來展示類的構(gòu)造。
Eg:定義基于NSObject類的Circle類
@interfaceCircle :NSObject
{
ShapeColor *fillColor;
}
-(void) draw;
-(void)setFillColor: (ShapeColor *) fillColor secondName:(int) index;
@end
1)、大括號內(nèi)的變量為類的實例變量(只在對象的實例中有效,所以稱為實例變量ivar),后面的為方法聲明。備注:c函數(shù)原型中沒有先行短線。
2)、方法返回類型與C函數(shù)有相同的類型:標準類型(整型、浮點型、字符串)、指針、引用對象和結(jié)構(gòu)體,如果方法使用參數(shù)則需要冒號,否則不需要冒號。沒有聲明實例變量時,無需大括號。
3)、上面多參數(shù)方法定義,也可以不需要secondName,但不推薦這樣使用。
4)、有些方法的聲明是先行加號,這樣的方法為類方法(class method),這個方法屬于類對象(而不是類的實例對象),類似于靜態(tài)方法,通常用于創(chuàng)建新的實例,我們稱這種用來創(chuàng)建新對象的類方法為工廠方法。
5)、在對象類型的右邊都有一個*號,所有的對象變量都是指針類型。id類型(任意類型)已經(jīng)被預(yù)定義為指針類型,所以不需要再加一個*號。
2、@implementation
實現(xiàn)類一般在.m文件(實現(xiàn)文件)中實現(xiàn),實現(xiàn)了接口所聲明的所有方法。
Eg:上面Circle的實現(xiàn)類
@import “XXX.h”//引入上面定義的頭文件
@implementationCircle
- (void)setFillColor: (ShapeColor *) c
{
fillColor = c;
}
3、對象的實例化
1)、Circle *circle = [Circle new];//不建議這樣使用
2)、Circle *circle = [[Circle alloc]init];//一般這樣初始化
4、方法的調(diào)用
[ciclesetFillColor: kRedColor];//備注中間是空格
5、實例變量作用域的指令:
@protected實例變量可被該類及任何子類中定義的方法直接訪問(默認的情況)。
@private實例變量可被定義在該類的方法直接訪問,不能被子類定義的方法直接訪問。
@public實例變量可被該類中定義的方法直接訪問,也可被其他類或模塊中定義的方法訪問。使得其他方法或函數(shù)可以通過(->)來訪問實例變量(不推薦用)。
@package 對于64位圖像,可以在實現(xiàn)該類的圖像的任何地方訪問這個實例變量。
6、繼承
@interface Circle: NSObject
不支持多繼承,但Objective-C通過其它特性達到多繼承的效果,例如類別和協(xié)議。
7、復(fù)合(composition)
復(fù)合就好像音樂中的作曲一樣:將多個組件組合在一起,配合使用,從而得到完整的作品。嚴格來說,只有對象間的組合才能叫復(fù)合。
復(fù)合類之間的關(guān)系為“has a”。備注:在Objective-C中,復(fù)合是通過包含作為實例變量的對象指針實現(xiàn)的。
Eg:汽車有4個輪胎和一臺發(fā)動機。
@interface Car:NSObject
{
Engine *engine;
Tire *tire[4];
}
備注:為新建的Car對象分配內(nèi)存時,這些指針將被初始化為nil(零值)
六、id
id shapes[2];
shapes[0] = [[Circlealloc]init];
shaoes[1] =[ [Egg alloc]init];
它是指向任意類型對象的指針,相當于范型。
七、存取方法名命名
1、setter方法需要在屬性名稱前增加set前綴,eg:setEngine
2、getter方法則是以其返回的屬性名稱來命名,eg:engine不要將get用作getter方法的前綴,例如方法getEngine違反了命名慣例,get這個詞在Cocoa中有特殊的含義,如果get出現(xiàn)在Cocoa的方法名中,就意味著這個方法將你傳的參數(shù)作為指針來返回數(shù)值。