為啥你非得給分類添加實例呢

類別
個人認為類別是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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容