關於iOS 分類和擴充套件的區別
阿新 • • 發佈:2019-02-13
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 原文章