03-06、OC類中的類方法:聲明和實(shí)現(xiàn)以及調(diào)用01

1、類中什么時(shí)候可以定義類方法:

  • 如果你不想每次使用方法都需要?jiǎng)?chuàng)建對(duì)象開辟存儲(chǔ)空間
  • 并且如果該方法中沒有使用到屬性(成員變量), 那么你可以把這個(gè)方法定義為類方法

2、如何定義類方法:

  • 類方法的寫法和對(duì)象方法一模一樣, 除了前面的-號(hào)不同以外,只需要將對(duì)象方法的-號(hào)換成+, 那么就定義了一個(gè)類方法。
  • 如果聲明的是對(duì)象方法那么就必須實(shí)現(xiàn)對(duì)象方法,如果聲明的是類方法那么就必須實(shí)現(xiàn)類方法,聲明和實(shí)現(xiàn)必須一一對(duì)應(yīng)。

3、類方法和對(duì)象方法的區(qū)別

  1. 對(duì)象方法以-開頭
    類方法以+開頭

  2. 對(duì)象方法必須用對(duì)象調(diào)用
    類方法必須用類來調(diào)用

  3. 對(duì)象方法中可以直接訪問屬性(成員變量)
    類方法中不可以直接訪問屬性(成員變量)

  4. 類方法和對(duì)象方法可以進(jìn)行相互調(diào)用
    4.1對(duì)象方法中可以直接調(diào)用類方法
    4.2類方法中間接調(diào)用對(duì)象方法 (注意: 不建議這樣使用)
    4.3類方法中可以直接調(diào)用其它類方法
    4.4對(duì)象方法中可以直接調(diào)用對(duì)象方法

4、類方法的應(yīng)用場景
如果方法中沒有使用到屬性(成員變量), 那么能用類方法就用類方法
類方法的執(zhí)行效率比對(duì)象方法高

類方法一般用于定義工具方法
字符串查找
文件操作
數(shù)據(jù)庫操作
=========================以下是代碼========================

#import <Foundation/Foundation.h>

/*
 事物名稱: iPhone
 屬性: 顏色, 型號(hào), cpu, 尺寸   == 成員變量
 行為:打電話, 發(fā)短信, 上網(wǎng), 獲取本機(jī)信息    == 成員方法
 */

// 1.編寫類的聲明
@interface Iphone : NSObject
{

@public
float _model; // 型號(hào)  0
int _cpu; // cup   0
double _size; // 尺寸  0
int _color; // 顏色  0
}
- (void)about;
- (char *)loadMessage;
- (int)signal:(int)number;
- (int)sendMessageWithNumber:(int)number andContent:(char *)content;

// 計(jì)算器
// 如果你不想每次使用方法都需要?jiǎng)?chuàng)建對(duì)象開辟存儲(chǔ)空間
// 并且如果該方法中沒有使用到屬性(成員變量), 那么你可以把這個(gè)方法定義為類方法
// 對(duì)象方法用對(duì)象調(diào)用  類方法用類調(diào)用
//- (int)sumWithValue1:(int)value1 andValue2:(int)value2;

// 如果定義類方法, 類方法的寫法和對(duì)象方法一模一樣, 除了前面的-號(hào)不同以外 \
只需要將對(duì)象方法的-號(hào)換成+, 那么就定義了一個(gè)類方法
+ (int)sumWithValue1:(int)value1 andValue2:(int)value2;

+ (void)demo;

@end

// 2.編寫類的實(shí)現(xiàn)
@implementation Iphone

// 行為的實(shí)現(xiàn)
- (void)about
{
//    NSLog(@"sum = %i", [Iphone sumWithValue1:50 andValue2:50]);
NSLog(@"型號(hào) = %f, cpu = %i, 尺寸= %f, 顏色 = %i", _model, _cpu, _size, _color);
//    Iphone *p = [Iphone new];
//    NSLog(@"%s", [p loadMessage]);

//    NSLog(@"%s", [self loadMessage]);
}
- (char *)loadMessage
{
return "wife is god";
}

- (int)signal:(int)number
{
NSLog(@"打電話給%i", number);
return 1;
}

- (int)sendMessageWithNumber:(int)number andContent:(char *)content
{
NSLog(@"發(fā)短信給%i, 內(nèi)容是%s", number, content);
return 1;
}

// 注意: 如果聲明的是對(duì)象方法那么就必須實(shí)現(xiàn)對(duì)象方法
//      如果聲明的是類方法那么就必須實(shí)現(xiàn)類方法


+ (int)sumWithValue1:(int)value1 andValue2:(int)value2
{
//     NSLog(@"型號(hào) = %f, cpu = %i, 尺寸= %f, 顏色 = %i", _model, _cpu, _size, _color);
//    Iphone *p = [Iphone new];
//    [p signal:123456789]; // 注意: 在企業(yè)開發(fā)中, 不建議這樣使用
return value1 + value2;
}

+ (void)demo
{
//    NSLog(@"%i", [Iphone sumWithValue1:90 andValue2:90]);
NSLog(@"demo");
}
@end

int main(int argc, const char * argv[]) {

/*
// 1.通過類創(chuàng)建對(duì)象
Iphone *p = [Iphone new];
// 2.修改對(duì)象的屬性
p->_size = 3.5;
p->_color = 0;
p->_model = 4;
p->_cpu = 1;


// 3.如果給對(duì)象發(fā)消息(如果調(diào)用對(duì)象的方法)
[p  about];
char *content = [p loadMessage];
NSLog(@"content = %s", content);
[p signal:13838338];
[p sendMessageWithNumber:123456789 andContent:"hi"];

//    int res = [p sumWithValue1:10 andValue2:20];
int res = [Iphone sumWithValue1:10 andValue2:20];
NSLog(@"res = %i", res);
 */

//    [Iphone signal:13838338];

Iphone *p = [Iphone new];
//    int res = [p sumWithValue1:10 andValue2:20];
//    [p about];

//    [Iphone sumWithValue1:10 andValue2:20];
//    [Iphone demo];

[p about];

return 0;
}

void test()
{
// 1.創(chuàng)建一個(gè)對(duì)象
/*
 開辟一塊存儲(chǔ)空間
 */
//    Iphone *p1 = [Iphone new];
// 2.利用對(duì)象調(diào)用加法運(yùn)算方法
//    int res = [p1 sumWithValue1:50 andValue2:50];
int res = [Iphone sumWithValue1:50 andValue2:50];
NSLog(@"res = %i", res);

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容