1. 程式人生 > >關於iOS 分類和擴充套件的區別

關於iOS 分類和擴充套件的區別

1、擴充套件

Class Extension也有人稱為匿名分類

  • 能為某個類附加額外的屬性,成員變數,方法宣告
  • 一般的類擴充套件寫到.m檔案中
  • 一般的私有屬性寫到類擴充套件
使用格式:
@interface Mitchell()
//屬性
//方法
@end

與分類的區別

  • 分類的小括號中必須有名字

    @interface 類名(分類名字)
    /*方法宣告*/
    @end
    @implementation類名(分類名字)
    /*方法實現*/
    @end
  • 分類只能擴充方法,不能擴充套件屬性和成員變數(如果包含成員變數會直接報錯)。
  • 如果分類中聲明瞭一個屬性,那麼分類只會生成這個屬性的set、get方法宣告,也就是不會有實現。
  • 舉例說明:如果我們分別在,類擴充套件與分類中添加了兩個屬性,

意思是說,我們所建立的物件中並沒有textOne這個屬性。也就是說雖然我們再類別中宣告屬性不會報錯,但是@property並沒有自動為我們設定的屬性生成set、get方法

@interface NSObject (XY)
  @property (nonatomic, strong) id                tempObject;
  @end

 @implementation NSObject (XY)

 @dynamic tempObject;
 - (id)tempObject
  - {
      id object = objc_getAssociatedObject(self
,NSObject_key_tempObject); return object; } - (void)setTempObject:(id)tempObject { [self willChangeValueForKey:@"tempObject"]; objc_setAssociatedObject(self, NSObject_key_tempObject, tempObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self didChangeValueForKey:@"tempObject"]; } @end

http://www.jianshu.com/p/18d48e7f2aad  原文章

http://www.jianshu.com/p/4bebb68a0648 原文章