亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

類和實例方法有什么區別?

類和實例方法有什么區別?

iOS
白衣非少年 2019-06-05 11:02:18
類和實例方法有什么區別?類方法和實例方法有什么區別?實例方法是否是訪問器(getter和setter),而類方法幾乎是所有其他東西?
查看完整描述

3 回答

?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

正如大多數其他答案所說的,實例方法使用類的實例,而類方法可以與類名一起使用。在目標-C中,它們的定義如下:

@interface MyClass : NSObject+ (void)aClassMethod;- (void)anInstanceMethod;@end

這樣就可以這樣使用:

[MyClass aClassMethod];MyClass *object = [[MyClass alloc] init];[object anInstanceMethod];

類方法的一些實際示例是許多基礎類的方便方法,如NSString+stringWithFormat:NSArray+arrayWithArray:..實例方法將是NSArray-count方法。


查看完整回答
反對 回復 2019-06-05
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

與其他答案一樣,實例方法對象進行操作并訪問其實例變量,而類方法作為一個整體對類進行操作,并且無法訪問特定實例的變量(除非將實例作為參數傳入)。

類方法的一個很好的例子是反類型方法,它返回類的實例總數。類方法以+,而實例的開頭是-..例如:

static int numberOfPeople = 0;@interface MNPerson : NSObject {
     int age;  //instance variable}+ (int)population; //class method. Returns how many people have been made.- (id)init;
      //instance. Constructs object, increments numberOfPeople by one.- (int)age;
       //instance. returns the person age@end@implementation MNPerson- (id)init{
    if (self = [super init]){
          numberOfPeople++;
          age = 0;
    }    
    return self;}+ (int)population{ 
     return numberOfPeople;}- (int)age{
     return age;}@end

M:

MNPerson *micmoo = [[MNPerson alloc] init];MNPerson *jon = [[MNPerson alloc] init];NSLog(@"Age: %d",[micmoo age]);NSLog(@"%Number Of people:
 %d",[MNPerson population]);

產出:年齡:0人:2

另一個例子是,如果您有一個希望用戶能夠調用的方法,有時將它變成一個類方法是很好的。例如,如果您有一個名為MathFunctions的類,您可以這樣做:

+ (int)square:(int)num{ 
      return num * num;}

因此,用戶將調用:

[MathFunctions square:34];

而不必實例化類!

還可以使用類函數返回自動釋放的對象,如NSArray的

+ (NSArray *)arrayWithObject:(id)object

它接受一個對象,將其放入數組中,并返回一個不需要管理內存的自動釋放的數組版本,這對于臨時數組和其他不需要管理的數組非常有用。

我希望您現在理解何時和/或為什么要使用類方法!


查看完整回答
反對 回復 2019-06-05
  • 3 回答
  • 0 關注
  • 927 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號