能够模拟添加一个实例变量到一个已有的类中,能够添加存储到一个对象中而不需要改变类的定义。
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 }