標籤:
------<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類方法與對象方法、區別、與調用-我之見解