2017-02-21 7 views
1

Связанные объекты используются для создания свойства в iOS и некоторых хитрых изменений в iOS. Кто-нибудь захочет объяснить, как это делается?Связанные объекты inUIAlertView в iOS

- (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

Насколько я знаю, вы можете добавить новое свойство во время выполнения в существующий объект класса. Он позволяет объектам связывать произвольные значения для ключей во время выполнения.

связанных объекты или Ассоциативные литературы, как они первоначально были известны -является особенностью 2.0 выполнения Objective-C, введенного в OS X Snow Leopard (доступен в прошивке 4). Термин относится к следующему три C функции, объявленной в, которые позволяют объекты ассоциированных произвольных значениям для ключей во время выполнения:

  • objc_setAssociatedObject
  • objc_getAssociatedObject
  • objc_removeAssociatedObjects

Почему мы используем это? поскольку это позволяет нам добавлять настраиваемое свойство в существующий класс и может использовать там, где это необходимо, и после этого мы удалим это свойство во время выполнения.

В соответствии с вашим Использование здесь вы можете сказать, что нет отправитель недвижимость в UIAlertView класса и вы не права менять UIAlertView это путем использования associateObject вы можете добавить время выполнения свойство, которое вам необходимо время предупреждает делегат.

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

Это добавит его во время выполнения, и мы также сможем его удалить после его использования во время выполнения.

Вы можете найти более подробную информацию по этой ссылке:AssociatedObject

Надеется, что это помогает понять AssociatedObject концепции во время выполнения.

Смежные вопросы