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 }
  • 相关阅读:
    iOS 方便的宏定义
    IOS 推送消息 php做推送服务端
    iOS 7 动画UIDynamicAnimator
    iOS 适配
    ios 实现简单的解析xml网页
    用 MPMoviePlayerController 实现简单的视频下载播放功能
    ios 自定义弹出对话框效果
    ios国外大神
    git学习
    ios 7UI适配方法
  • 原文地址:https://www.cnblogs.com/cokecoffe/p/3021763.html
Copyright © 2011-2022 走看看