Objective-C中的類目和延展

來源:互聯網
上載者:User

標籤:

類目:為已知的類增加新的方法;延展:通知在本類的定義裡使用類目來聲明私人方法;

一、類目:

1. 類目方法的應用:

 

  • 對現有類進行擴充:比如:可以擴充Cocoa touch架構中的類,在類目中增加的方法會被子類繼承,而且在運行時跟其他的方法沒有區別。
  • 作為子類的替代手段:不需要定義和使用一個子類,可以通過類目直接向已有的類裡增加方法。
  • 對類中的方法歸類:利用catigory把一個龐大的類劃分為小塊來分別進行開發,從而更好地對類中的方法進行更新和維護。

2. 類目方法的局限性:

 

  • 無法向類目中添加新的執行個體變數,類目沒有位置來容納執行個體變數。如果想增加類的執行個體變數,只能通過定義子類的方式。
  • 如若,在類目中覆蓋先後類的方法。這樣會引起super訊息的斷裂,因為類目總的方法具有更高的優先順序,因此,一般不要覆蓋現有類中的方法。

 

3.類目的定義:

      類目的命名規則:類名+擴充方法,如“NSString+Revert”。 類目的介面聲明與類的定義十分相似,但類目不繼承父類,只需要帶有一個括弧,表明該類目的主要用途。

NSString+Revert.h檔案:

#import <Foundation/Foundation.h>

@interface NSString (Revert)

- (void)test;

@end

NSString+Revert.m檔案:

#import "NSString+Revert.h"

@implementation NSString (Revert)

- (void)test{
}

@end

 

二、延展:

類的延展可以看作是一種匿名的類目,類有時需要一些只為自己所見,所用的私人方法這種私人方法可以通過延展的方式來聲明,延展中定義的方法在類本身的@implementation代碼地區中進行實現。

@interface MyObject : NSObject
{
NSNumber *number;

}
- (NSNumber *)number;
@end

@interface MyObject (Setter)
- (void)setNumber:(NSNumber *)newNumber;
@end


@implementation MyObject
- (NSNumber *)number
{
return number;
}
- (void)setNumber:(NSNumber *)newNumber
{!//do something
}
@end

        當在定義延展的時候不提供類目名時,延展中定義的方法既被視為“必須實現”的API在這種情況下,如果方法缺少實現代碼,則編譯器會警示告,此時方法的實現必須出現在類主體的@implementation代碼塊中。

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.