黑馬程式員--Objective-C類方法與對象方法、區別、與調用-我之見解

來源:互聯網
上載者:User

標籤:

------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! -------

類方法.

1. 特點:

以加號( + )開頭,

調用格式:  [類名  方法名]

     類方法的好處:不需要建立執行個體對象,直 接通過類名訪問,節省空間的 ,提高了效率

 2.注意事項:

類方法可以和執行個體方法同名, 相互之間互不影響

 

類方法可以從父類繼承而來,子類可以重寫類方法 // ,如description類方法

 

類方法和執行個體方法一樣在interface裡聲明, 在implementation裡實現。

 

類方法由類名調用,  執行個體方法由對象調用。

 

在類方法裡使用了self, self指代的是調用者類

 

在類方法中不能使用類的成員變數

 

類方法和對象方法之間不能使用self 相互調用

 

總結self : 誰調用當前方法, self就代表誰

3.對象方法中可以調用其他對象方法

1)當前對象方法中建立對象(可以是當前類的執行個體對象,也可以是其他類的執行個體對象),使用新建立的對象調用方法

2)可以使用self

3)對象作為方法的參數傳遞過來,可以使用傳遞過來的對象調用方法

 

4.在類方法中可以調用其他類的方法

1)可以直接使用類名(或者其他類名)調用類方法

2)可以使用self

5) 在類方法中可以調用對象方法

1)對象作為方法的參數傳遞過來

2)可以建立一個對象

 

6.類方法和對象方法的比較

對象方法以減號開頭, 可以使用成員變數

類方法以加號開頭,不能使用成員變數

 

7.類方法使用情境

如果我們調用一個方法,該方法中不需要使用成員變數,那麼我們可以將該方法聲明為類方法

 以下代碼是對上述部分知識點的驗證

main.m#import <Foundation/Foundation.h>#import "Dog.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        // 1. 通過類名調用eat類方法        [Dog eat];        // 2. 調用jump類方法        Dog *dog = [Dog new];        [Dog jump:dog];//        [dog bark];    }    return 0;}Dog.h#import <Foundation/Foundation.h>@interface Dog : NSObject//類方法和執行個體方法一樣在interface裡聲明。
+(void)eat;+(void)run;+(void)jump:(Dog *)dogDog;-(void)bark;-(void)sleep;@endDog.m#import "Dog.h"@implementation Dog+(void)eat//類方法和對象方法一樣在@implemention中實現{    NSLog(@"狗正在吃");    // 1.類方法裡調用類方法 通過類名調用//    [Dog run];    // 2. 類方法裡調用類方法 通過self    [self run];}+(void)run{    NSLog(@"狗跑了");}+(void)jump:(Dog *)dogDog{    NSLog(@"狗狗在跳");    [dogDog bark];//類方法裡調用對象方法 對象作為方法的參數傳遞過來}-(void)bark{    NSLog(@"狗在叫");    // 1. 調用的類方法//    [Dog run];    // 2. 調用對象方法 自己調用自己陷入死迴圈//    [self  bark];}-(void)sleep{    NSLog(@"狗玩累了,要睡覺了");}@end

 

 

 

 

函數和對象方法的區別

-(void)run;

(1)對象方法的實現在@[email protected]中

 

對象方法的聲明只能寫在 @[email protected]中間

 

(2)對象方法都以-號開頭

 

(3)對象方法只能由對象來調用

 

(4)函數屬於整個檔案,可以寫在檔案中的任何位置,包括@[email protected]中,但寫在 @[email protected]會無法識別,函數的聲明可以在main函數內部也可以在main函數外部。

 

(5)對象方法歸對象所有

 

函數: void run(){

}

(1)所有的函數都是平行的

(2)函數不存在隸屬關係

(3)使用的時候可以直接調用

(4)不可以訪問對象中的成員變數

 

對象和方法之間的關係

(1),對象作為方法的參數

-(void) displayPerson:(Person *)person{    NSLog("姓名:%@",person->name);}

 

 

 

(2),對象作為方法的傳回值

-(Person *)changePerson:(Person *)person{    person->name = @"唐僧";    return person;}

 

黑馬程式員--Objective-C類方法與對象方法、區別、與調用-我之見解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.