OC中類(lèi)與對(duì)象的基礎(chǔ)應(yīng)用

對(duì)象,是面對(duì)對(duì)象程序的核心
面對(duì)對(duì)象三大特征:繼承,封裝,多態(tài)
OC中的類(lèi):類(lèi)可以是任意的事物,是具有相同特征的事物

這里要注意:在OC中NSObject是所有類(lèi)直接或者間接的父類(lèi)

  • 類(lèi)的聲明和實(shí)現(xiàn):
  • 類(lèi)的聲明:(成員變量 + 成員方法)
    成員變量的聲明(成員變量默認(rèn)都是受保護(hù)的@protected)
    a) 在大括號(hào)里面寫(xiě)成員變量的屬性時(shí)所遵循的規(guī)則:
    1 以下劃線開(kāi)頭
    2 遵循駝峰原則(首個(gè)單詞字母小寫(xiě),后面單詞首個(gè)字母大寫(xiě))
    3 不能與關(guān)鍵詞重名
    b) 直接用@property進(jìn)行聲明:不需要寫(xiě)set和get方法,會(huì)自動(dòng)展開(kāi)成setter和getter的聲明,會(huì)自動(dòng)生成一個(gè)帶下劃線的成員變量
nonatomic:為原子操作,效率快
copy:修飾字符串
assign:修飾基本類(lèi)型
retain:修飾對(duì)象
readwrite(默認(rèn)) 生成set和get方法 讀寫(xiě)
readonly:只生成get方法
  • 方法的聲明:
    對(duì)象方法: -(void)方法名(void); 需要?jiǎng)?chuàng)建對(duì)象來(lái)進(jìn)行調(diào)用,可以直接訪問(wèn)成員變量
    類(lèi)方法:+(void)方法名(void); 直接用類(lèi)名來(lái)進(jìn)行調(diào)用,不可以直接訪問(wèn)成員變量
    void為沒(méi)有返回值沒(méi)有參數(shù),可以自行修改,但是如果有參數(shù),那么每個(gè)參數(shù)的數(shù)據(jù)類(lèi)型前面必須加上一個(gè)":",冒號(hào)也是方法名的一部分
    類(lèi)方法的優(yōu)點(diǎn):調(diào)用類(lèi)方法的效率會(huì)比調(diào)用對(duì)象方法高
    - 對(duì)象方法和類(lèi)方法可以進(jìn)行相互調(diào)用
    - 對(duì)象方法中可以直接調(diào)用類(lèi)方法
    - 可以在類(lèi)方法中間接調(diào)用對(duì)象方法(木木不建議這樣做喲~)
    - 類(lèi)方法中可以直接調(diào)用其他類(lèi)方法
    - 對(duì)象方法中可以直接調(diào)用對(duì)象方法
    類(lèi)方法一般用于定義工具方法:字符串查找,文件操作,數(shù)據(jù)庫(kù)庫(kù)操作

注意:類(lèi)方法中不能直接使用成員變量,但是可以創(chuàng)建對(duì)象后,用對(duì)象去調(diào)用對(duì)象方法,或者間接訪問(wèn)成員變量. 在OC中的方法,如果沒(méi)有形參不需要寫(xiě)( ),而是直接寫(xiě)一個(gè)“;”。因?yàn)镺C中的( )有特殊的用途,OC方法中的( )是用來(lái)括住數(shù)據(jù)類(lèi)型的

  • 類(lèi)的實(shí)現(xiàn):(所有在.h中寫(xiě)過(guò)的方法都在要.m中實(shí)現(xiàn)一遍,從父類(lèi)繼承過(guò)來(lái)的不用)

  • 對(duì)象
    對(duì)象是某個(gè)類(lèi)的具體化,對(duì)象一定一定要初始化才能有大小,有內(nèi)存,才能存儲(chǔ)數(shù)據(jù)(木木最開(kāi)始學(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ì)象類(lèi)型的指針指向?qū)ο? [[Student alloc] init] 為對(duì)象 ,stu為對(duì)象指針
    OC中的類(lèi)其實(shí)本質(zhì)就是一個(gè)結(jié)構(gòu)體,所以stu這個(gè)指針其實(shí)就是指向了一個(gè)結(jié)構(gòu)體

  • 方法的調(diào)用:
    對(duì)象方法的調(diào)用: [對(duì)象 對(duì)象方法名] self 代表的是當(dāng)前對(duì)象
    類(lèi)方法的調(diào)用:[類(lèi)名 類(lèi)方法名] self代表當(dāng)前類(lèi)

注意啦!! 類(lèi)是沒(méi)有大小的,不能存儲(chǔ)數(shù)據(jù)!
對(duì)象是有大小的,可以存儲(chǔ)數(shù)據(jù),但是一定要初始化 0

  • 類(lèi)中實(shí)例變量的權(quán)限和常用方法:

  • 實(shí)例變量權(quán)限:
    @public:公有的,外部(main函數(shù))中可以直接訪問(wèn),在本類(lèi)和子類(lèi)中也可以訪問(wèn)
    @protected(OC中缺省默認(rèn)):受保護(hù)的,在外部(main函數(shù))中不可以直接訪問(wèn),在本類(lèi)和子類(lèi)中可以訪問(wèn)
    @private:私有的,在外部以及子類(lèi)中都不可以訪問(wèn),只能在本類(lèi)中訪問(wèn)

  • 常用方法:
    init(構(gòu)造函數(shù)):

     set和get方法:  set:用于修改/設(shè)置成員變量;
                   get用于獲取成員變量值  
    
     給set和get方法起別名:@property (nonatomic,assign,setter=setMyHeight:) CGFloat height
    
     description(重寫(xiě)方法):打印對(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類(lèi)型不能使用點(diǎn)語(yǔ)法)
    
     單例方法:通過(guò)單例創(chuàng)建的對(duì)象永遠(yuǎn)只有一個(gè) ,static 靜態(tài)局部變量,保證變量的唯一性和持久性
    

    如何在方法里面調(diào)用其他方法:
    實(shí)例方法里的self和super:super用于調(diào)用父類(lèi)方法的關(guān)鍵字,self指向向前對(duì)象或者當(dāng)前類(lèi)的指針
    >注意:.h中聲明,.m中實(shí)現(xiàn)的方法可以在main函數(shù)中調(diào)用,也可以在本類(lèi)中用self調(diào)用
    但是在.h中沒(méi)有聲明,卻在.m中實(shí)現(xiàn)的方法不可以在main函數(shù)中調(diào)用,只能在本類(lèi)中用self調(diào)用

這里木木列舉一些之前遇到過(guò)的常見(jiàn)錯(cuò)誤,有需要的可以看一下
1 只有類(lèi)的聲明,沒(méi)有了的實(shí)現(xiàn)
2 漏了@end
3 @interface和@implementation嵌套
4 成員變量沒(méi)有寫(xiě)在括號(hào)里面
5 方法的聲明寫(xiě)進(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ú)立于類(lèi)存在
9 C函數(shù)不屬于類(lèi),跟類(lèi)沒(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è)類(lèi)的

僅供木木學(xué)習(xí),以及有需要的伙伴們閱讀~可轉(zhuǎn)載,不可復(fù)制粘貼喲~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容