【Objective-C】05-OC物件中類方法和物件方法的比較
阿新 • • 發佈:2019-02-17
一、類方法
1.1 噹噹前方法中不涉及類的成員變數時,可以把方法宣告成類方法。這樣做的好處是可以不用宣告類的例項物件,減少記憶體空間的佔用,提高執行效率。即類的方法不依賴於物件。
1.2 以加號 + 開頭
1.3 只能由類(名)來呼叫
1.4 類方法中不能訪問類的成員變數。如果訪問,會報 error:instance variable 'age' accessed in class method。
1.5 在類方法中呼叫自身,會導致程式陷入死迴圈
二、物件方法
2.1 噹噹前方法中需要訪問類的成員變數時,可以把方法宣告為物件方法。
2.2 以減號 - 開頭
2.3 只能由物件來呼叫
2.4 物件方法中能訪問當前物件的成員變數(例項變數)
三、類方法和物件方法可以同名
#import <Foundation/Foundation.h> @interface Person:NSObject { //年齡 int _age; } //獲取年齡值 - (int)age; //設定年齡值 - (void)setAge:(int)age; //類方法:列印當前類名 + (void)printfClassName; //物件方法:列印當前物件的年齡 - (void)test; //類方法:列印“333” + (void)test; @end @implementation Person - (int)age { return _age; } - (void)setAge:(int)age { _age=age; } + (void)printfClassName { NSLog(@"這個類叫做Person"); //類方法中不能訪問例項變數:use of undeclared identifier 'age' //NSLog(@"這個類叫做Person-%d",age); } - (void)test { NSLog(@"111-%d",[self age]); } + (void)test { NSLog(@"333"); //在類方法中呼叫自己,會引發死迴圈 //[Person test]; } @end int main() { //呼叫類方法 [Person printfClassName]; //呼叫類方法 [Person test]; //建立Person物件 Person *p =[Person new]; //設定當前物件的年齡 [p setAge:20]; //列印當前物件的年齡 [p test]; }