2017-02-21 60 views
1

关联对象用于在iOS中创建属性以及iOS中的一些狡猾更改。有人会关心解释这是如何做这些?iOS中的UIAlertView中的关联对象

- (IBAction)doSomething:(id)sender { 
 
    UIAlertView *alert = [[UIAlertView alloc] 
 
         initWithTitle:@"Alert" message:nil 
 
         delegate:self 
 
         cancelButtonTitle:@"OK" 
 
         otherButtonTitles:nil]; 
 
    objc_setAssociatedObject(alert, &kRepresentedObject, 
 
          sender, 
 
          OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
 
    [alert show]; 
 
    
 
} 
 

 
- (void)alertView:(UIAlertView *)alertView 
 
clickedButtonAtIndex:(NSInteger)buttonIndex { 
 
    UIButton *sender = objc_getAssociatedObject(alertView, 
 
               &kRepresentedObject); 
 
    self.buttonLabel.text = [[sender titleLabel] text]; 
 
}

苹果的定义并不能帮助我明白无论是。 “使用给定的键和关联策略为给定对象设置关联值。”

回答

0

根据我的知识,我们可以在运行时在现有的类对象中添加新的属性。它允许对象在运行时为键关联任意值。

关联的对象 - 或关联参考,因为它们最初 已知是Objective-C的2.0运行时,在OS X 雪豹(在IOS 4提供)引入的一个特征。该术语指的是在宣布以下 三架C功能,允许键对象 关联任意值在运行时:

  • objc_setAssociatedObject
  • objc_getAssociatedObject
  • objc_removeAssociatedObjects

为什么我们用这个?因为它允许我们将自定义属性添加到现有类,并可以利用它所需的位置,之后我们将在运行时删除该属性。

根据您的使用情况在这里,你可以说,没有在UIAlertView发件人财产,你没有权利通过使用改变UIAlertView所以associateObject你可以添加你需要同时运行时性能提醒代表会打电话。

objc_setAssociatedObject(alert, &kRepresentedObject, 
          sender, 
          OBJC_ASSOCIATION_RETAIN_NONATOMIC); 

这将添加它运行时,我们也可以在运行时使用它后删除它。

您可以在此链接上找到更多的细节:AssociatedObject

希望这将有助于了解在运行时AssociatedObject的概念。