對(duì)象,是面對(duì)對(duì)象程序的核心
面對(duì)對(duì)象三大特征:繼承,封裝愤炸,多態(tài)
OC中的類:類可以是任意的事物,是具有相同特征的事物
這里要注意:在OC中NSObject是所有類直接或者間接的父類
- 類的聲明和實(shí)現(xiàn):
- 類的聲明:(成員變量 + 成員方法)
成員變量的聲明(成員變量默認(rèn)都是受保護(hù)的@protected)
a) 在大括號(hào)里面寫成員變量的屬性時(shí)所遵循的規(guī)則:
1 以下劃線開頭
2 遵循駝峰原則(首個(gè)單詞字母小寫掉奄,后面單詞首個(gè)字母大寫)
3 不能與關(guān)鍵詞重名
b) 直接用@property進(jìn)行聲明:不需要寫set和get方法规个,會(huì)自動(dòng)展開成setter和getter的聲明,會(huì)自動(dòng)生成一個(gè)帶下劃線的成員變量
nonatomic:為原子操作,效率快
copy:修飾字符串
assign:修飾基本類型
retain:修飾對(duì)象
readwrite(默認(rèn)) 生成set和get方法 讀寫
readonly:只生成get方法
- 方法的聲明:
對(duì)象方法: -(void)方法名(void); 需要?jiǎng)?chuàng)建對(duì)象來(lái)進(jìn)行調(diào)用诞仓,可以直接訪問(wèn)成員變量
類方法:+(void)方法名(void); 直接用類名來(lái)進(jìn)行調(diào)用缤苫,不可以直接訪問(wèn)成員變量
void為沒(méi)有返回值沒(méi)有參數(shù),可以自行修改墅拭,但是如果有參數(shù)活玲,那么每個(gè)參數(shù)的數(shù)據(jù)類型前面必須加上一個(gè)":",冒號(hào)也是方法名的一部分
類方法的優(yōu)點(diǎn):調(diào)用類方法的效率會(huì)比調(diào)用對(duì)象方法高
- 對(duì)象方法和類方法可以進(jìn)行相互調(diào)用
- 對(duì)象方法中可以直接調(diào)用類方法
- 可以在類方法中間接調(diào)用對(duì)象方法(木木不建議這樣做喲~)
- 類方法中可以直接調(diào)用其他類方法
- 對(duì)象方法中可以直接調(diào)用對(duì)象方法
類方法一般用于定義工具方法:字符串查找,文件操作帜矾,數(shù)據(jù)庫(kù)庫(kù)操作
注意:類方法中不能直接使用成員變量翼虫,但是可以創(chuàng)建對(duì)象后,用對(duì)象去調(diào)用對(duì)象方法屡萤,或者間接訪問(wèn)成員變量. 在OC中的方法珍剑,如果沒(méi)有形參不需要寫( ),而是直接寫一個(gè)“;”。因?yàn)镺C中的( )有特殊的用途死陆,OC方法中的( )是用來(lái)括住數(shù)據(jù)類型的
類的實(shí)現(xiàn):(所有在.h中寫過(guò)的方法都在要.m中實(shí)現(xiàn)一遍,從父類繼承過(guò)來(lái)的不用)
對(duì)象
對(duì)象是某個(gè)類的具體化招拙,對(duì)象一定一定要初始化才能有大小,有內(nèi)存措译,才能存儲(chǔ)數(shù)據(jù)(木木最開始學(xué)的時(shí)候經(jīng)常忘記初始化對(duì)象别凤,導(dǎo)致各種bug~,要注意啦!!)
對(duì)象的創(chuàng)建:創(chuàng)建對(duì)象,為對(duì)象分配存儲(chǔ)空間的同時(shí)初始化成員變量
對(duì)象和對(duì)象指針领虹,這兩個(gè)要分清楚 规哪。
比如:Student *stu = [[Student alloc] init] 創(chuàng)建了一個(gè)對(duì)象類型的指針指向?qū)ο? [[Student alloc] init] 為對(duì)象 ,stu為對(duì)象指針
OC中的類其實(shí)本質(zhì)就是一個(gè)結(jié)構(gòu)體塌衰,所以stu這個(gè)指針其實(shí)就是指向了一個(gè)結(jié)構(gòu)體方法的調(diào)用:
對(duì)象方法的調(diào)用: [對(duì)象 對(duì)象方法名] self 代表的是當(dāng)前對(duì)象
類方法的調(diào)用:[類名 類方法名] self代表當(dāng)前類
注意啦K呱浴! 類是沒(méi)有大小的最疆,不能存儲(chǔ)數(shù)據(jù)杯巨!
對(duì)象是有大小的,可以存儲(chǔ)數(shù)據(jù)努酸,但是一定要初始化 0
類中實(shí)例變量的權(quán)限和常用方法:
實(shí)例變量權(quán)限:
@public:公有的服爷,外部(main函數(shù))中可以直接訪問(wèn),在本類和子類中也可以訪問(wèn)
@protected(OC中缺省默認(rèn)):受保護(hù)的获诈,在外部(main函數(shù))中不可以直接訪問(wèn)仍源,在本類和子類中可以訪問(wèn)
@private:私有的,在外部以及子類中都不可以訪問(wèn)烙荷,只能在本類中訪問(wèn)-
常用方法:
init(構(gòu)造函數(shù)):set和get方法: set:用于修改/設(shè)置成員變量; get用于獲取成員變量值 給set和get方法起別名:@property (nonatomic,assign,setter=setMyHeight:) CGFloat height description(重寫方法):打印對(duì)象時(shí)調(diào)用這個(gè)方法: - (NSString *)description { return [NSString stringWithFormat:@"name == %@ age == %ld",_name,_age]; } 點(diǎn)語(yǔ)法:(本質(zhì)就是方法的調(diào)用镜会,轉(zhuǎn)換成相應(yīng)的set和get方法,id類型不能使用點(diǎn)語(yǔ)法) 單例方法:通過(guò)單例創(chuàng)建的對(duì)象永遠(yuǎn)只有一個(gè) ,static 靜態(tài)局部變量终抽,保證變量的唯一性和持久性
如何在方法里面調(diào)用其他方法:
實(shí)例方法里的self和super:super用于調(diào)用父類方法的關(guān)鍵字,self指向向前對(duì)象或者當(dāng)前類的指針
>注意:.h中聲明,.m中實(shí)現(xiàn)的方法可以在main函數(shù)中調(diào)用,也可以在本類中用self調(diào)用
但是在.h中沒(méi)有聲明昼伴,卻在.m中實(shí)現(xiàn)的方法不可以在main函數(shù)中調(diào)用匾旭,只能在本類中用self調(diào)用
這里木木列舉一些之前遇到過(guò)的常見錯(cuò)誤,有需要的可以看一下
1 只有類的聲明圃郊,沒(méi)有了的實(shí)現(xiàn)
2 漏了@end
3 @interface和@implementation嵌套
4 成員變量沒(méi)有寫在括號(hào)里面
5 方法的聲明寫進(jìn)了大括號(hào)
6 成員變量不能在{}中進(jìn)行初始化价涝,不能被直接拿出去訪問(wèn)
7 方法不能當(dāng)做函數(shù)一樣調(diào)用
8 OC方法只能聲明在@interface和@end之間,只能實(shí)現(xiàn)在@implementation和@end之間持舆,也就是說(shuō)OC方法不能獨(dú)立于類存在
9 C函數(shù)不屬于類色瘩,跟類沒(méi)有關(guān)系,c函數(shù)只歸定義函數(shù)的文件所有
10 C函數(shù)不能訪問(wèn)OC對(duì)象的成員
11 低級(jí)錯(cuò)誤:方法有聲明逸寓,但是實(shí)現(xiàn)的時(shí)候?qū)懗闪撕瘮?shù)
12 OC可以沒(méi)有@interface,同樣也是可以定義一個(gè)類的
僅供木木學(xué)習(xí)居兆,以及有需要的伙伴們閱讀~可轉(zhuǎn)載,不可復(fù)制粘貼喲~