類別
個人認為類別是Objective-C設計的一大精髓,也是我愛上Objective-C的最大理由。
類別是個強大的東西,它既可以為類添加方法,也可以添加實例。一定有不少人不認同,想提醒我:類別的局限性之一就是無法向類中添加新的實例變量。 背書真心毀人,聽我舉個例子慢慢說。
重新再來個Teacher類:
@interface Teacher : NSObject
{
NSUInteger age;
}
@end
光有個年齡還不能滿足對teacher的描述,我想加個profession實例來存teacher的專業(yè)。直觀的想法是子類化Teacher,其實也可以用類別。
你需要了解一下 runtime 編程知識,關注一下 objc_setAssociatedObject 和 objc_getAssociatedObject 。
//
// Teacher+Profession.m
//
#import "Teacher+Profession.h"
#import
const char *ProfessionType = "NSString *";
@implementation Teacher (Profession)
-(void)setProf:(NSString*)prof
{
objc_setAssociatedObject(self, ProfessionType, prof, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(NSString *)prof
{
NSString *pro = objc_getAssociatedObject(self, ProfessionType);
return pro;
}
@end
現在就可以通過setProf: 和 prof 來存取 teacher 的 profession 值了。
作者:ScaryMonsterLyn
鏈接:http://www.itdecent.cn/p/c473b41c083d
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。