关联引用(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 }

 

posted on 2013-04-15 11:47  cokecoffe  阅读(268)  评论(0编辑  收藏  举报

导航