在ios開發(fā)中,分類的概念我們都很熟悉,通常我們會(huì)利用分類來給一個(gè)類添加一些額外的方法,添加方法的操作和平時(shí)在類中添加方法的操作一致,這里就不再贅述。下面我們來說說怎樣在分類中添加屬性:
添加屬性可以再分類的.h文件中來添加,也可以再.m文件中的匿名分類中添加,我們像添加普通屬性一樣添加分類屬性,這是編譯器不會(huì)報(bào)任何的異常,但是當(dāng)使用到這些分類屬性的時(shí)候會(huì)導(dǎo)致程序崩潰,為了解決這個(gè)問題,我們需要用到runtime運(yùn)行時(shí)。
舉個(gè)栗子:
添加的分類屬性如下:
@property (nonatomic, copy) NSString *title;
添加運(yùn)行時(shí)頭文件
#import <objc/runtime.h>
然后重寫屬性的set和get方法
// 定義屬性的Key
static NSString *titleKey = @"titleKey";
- (void)setTitle:(NSString *)title
{
objc_setAssociatedObject(self, &titleKey, title, OBJC_ASSOCIATION_COPY);
}
- (NSString *)title
{
return objc_getAssociatedObject(self, &titleKey);
}
objc_setAssociatedObject方法中,有四個(gè)參數(shù),分別是:源對(duì)象,關(guān)聯(lián)時(shí)的用來標(biāo)記是哪一個(gè)屬性的key(因?yàn)槟憧赡芤砑雍芏鄬傩裕?,關(guān)聯(lián)的對(duì)象和一個(gè)關(guān)聯(lián)策略。
重寫完set和get方法后,就可以正常使用了。