2017-02-21 34 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的概念。