zoukankan      html  css  js  c++  java
  • 关联引用(Associative References)为现有类添加变量

    能够模拟添加一个实例变量到一个已有的类中,能够添加存储到一个对象中而不需要改变类的定义。

    1.通过分类给已有类添加属性

    1  @interface Person:NSObject
    2  @end
    3 
    4  @implementation Person
    5  @end
     1 @interface Person(EmailAddress)
     2 @property (nonatomic,readwrite,copy)NSString *emailAddress;
     3 @end
     4 
     5 @implement Person(EmailAddress)
     6 
     7 static char emailAddressKey;
     8 
     9 -(NSString*)emailAddress{
    10     return obj_getAssociatedObject(self,&emailAddressKey);//取出关联引用
    11 }
    12 
    13 -(void)setEmailAddress:(NSString*)emailAddress{
    14     objc_setAssociatedObject(self,&emailAddressKey,emailAddress,OBJC_ASSOCIATION_COPY);//设置关联引用
    15 }
    16 
    17 @end

    2.利用关联引用,给UIAlertView添加一个变量。

     1 static char kRepresentedObject;
     2 
     3 NSString *addThing = "添加的东西";
     4 UIAlertView *alert = [UIAlertView alloc]initWithTitile:@"Alert" message:nil delegate:self cancelButtonTitle:@"ok" otherButtonTitle:nil];
     5 
     6 obj_setAssociatedObject(alert,&kRepresentedObject,addThing,OBJC_ASSOCIATION_RETAIN_NONATOMIC);//将addThing添加到alert
     7 
     8 [alert show];
     9 
    10 
    11 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    12     NSString *addThing = objc_getAssociatedObject(alertView,&kRepresentedObject);  //取出
    13 }
  • 相关阅读:
    form表单生成的简单理解
    drupal里面的ajax最粗浅的理解-流程
    #array_parents #parents的区别
    hook_schema 小总结
    多语言的sitemap xml
    做百度竞价的步骤 不断总结
    为什么要baidu/Google问题 尽量少在群里问问题
    JavaScript Window对象
    JavaScript 3种内置对象
    图片轮播
  • 原文地址:https://www.cnblogs.com/cokecoffe/p/3021763.html
Copyright © 2011-2022 走看看