Objective-C中的方法有兩種:類方法和對象方法(也叫作實例方法)。
1、對象方法(實例方法)
1.1、對象方法解釋
對象方法以 - 開頭,屬于類的某一個或某幾個實例對象。對象方法是類對象必須進(jìn)行實例化后才可以使用的方法,對象方法將消息發(fā)送給實例對象。
1.2、對象方法聲明
-
格式
對象方法.png - 特征:
- 對象方法以-開頭如 -(void)xx;
- 對象方法只能由對象來調(diào)用
- 對象方法中可以訪問當(dāng)前對象的成員變量
- 調(diào)用格式 [對象名 對象方法名];
1.3、對象方法實現(xiàn):
- 必須寫在以@implementation開頭,@end之間
- 在聲明的后面加上{}即表示實現(xiàn)
- 將需要實現(xiàn)的代碼寫在{}中
2、類方法
2.1、類方法解釋
以+開頭的方法是類方法。它是屬于類本身的方法,不屬于類的某一個實例對象,不需要實例化類,用類名即可使用,通過類方法將消息發(fā)送給類。
2.2、類方法聲明
- 格式
將對象方法-號變?yōu)?號
- 特征
- 類方法以+開頭 如+(void)put;
- 類方法只能由類來調(diào)用
- 類方法中不能訪問實例(成員)變量,因為類方法由類來調(diào)用,并沒有創(chuàng)建存儲空間來存儲類中的成員變量。
- 類方法的好處:
- 不依賴于對象,執(zhí)行效率更高;
- 能用類方法解決的問題,盡量使用類方法;
- 類方法的場合:
- 當(dāng)方法內(nèi)部不需要使用到成員變量時,可以改為類方法
- 類方法一般用于編寫工具方法
2.3、類方法實現(xiàn)
- 必須寫在以@implementation開頭,@end之間
- 在聲明的后面加上{}即表示實現(xiàn)
- 將需要實現(xiàn)的代碼寫在{}中
3.對象方法和類方法區(qū)別
3.1、對象方法
- 對象方法是屬于對象的
- 以減號-開頭
- 只能讓對象調(diào)用,沒有對象,這個方法根本不可能被執(zhí)行
- 對象方法能訪問實例變量(成員變量)
- 對象方法中可以調(diào)用當(dāng)前對象的對象方法
- 對象方法中可以調(diào)用其他對象的對象方法
- 對象方法中不可以調(diào)用類方法
3.2、類方法
- 類方法是屬于類的
- 以加號+開頭
- 只能用類名調(diào)用,對象不能調(diào)用
- 類方法中不能直接訪問實例變量(成員變量)
- 類方法中不能直接調(diào)用對象方法,要想調(diào)用對象方法,必須創(chuàng)建或傳入對象。
3.3、使用場合:
- 當(dāng)不需要訪問成員變量的時候,盡量用類方法
- 類方法和對象方法可以同名
4、聲明和實現(xiàn)
在OC中類的定義有兩部分:類的聲明、類的實現(xiàn)。
- .h:
類的聲明文件,用于聲明成員變量、方法。類的聲明使用關(guān)鍵字@interface和@end。
注意:.h中的方法只是做一個聲明,并不對方法進(jìn)行實現(xiàn)。
也就是說,只是說明一下方法名、方法的返回值類型、方法接收的參數(shù)類型而已,并不會編寫方法內(nèi)部的代碼。
- .m:
類的實現(xiàn)文件,用于實現(xiàn).h中聲明的方法。類的實現(xiàn)使用關(guān)鍵字@implementation和@end。
方法的聲明和實現(xiàn),都必須以 + 或者 -開頭:
- + 表示類方法(靜態(tài)方法)
- - 表示對象方法(動態(tài)方法)
在.h中聲明的所有方法作用域都是public類型,不能更改。
成員變量的常用作用域有3種:
- @public 全局都可以訪問
- @protected 只能在類內(nèi)部和子類中訪問
- @private 只能在類內(nèi)部訪問
