iOS-关联对象

以UIAlertView为例,在创建时,对事件进行处理。
  • objc_setAssociatedObject 此方法以给定的键和策略为某对象设置关联对象值
  • objc_getAssociatedObject 此方法根据给定的键从某对象中获取相应的关联对象值
  • objc_removeAssociatedObjects 此方法移除指定对象的全部关联对象
// 设置关联对象时,通常使用静态全局变量做键。
static void * EOCMyAiertViewKey = "EOCMyAiertViewKey";

UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Question" message:@"What do you want to do?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Continue", nil];

void(^ block)(NSInteger) = ^(NSInteger buttonIndex) {
    
    // 在这里判断ButtonIndex 做相应处理
};

objc_setAssociatedObject(alert, EOCMyAiertViewKey, block, OBJC_ASSOCIATION_COPY);

[alert show];

#pragma mark - alertViewDelegate
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    
    void(^ block)(NSInteger) = objc_getAssociatedObject(alertView, EOCMyAiertViewKey);
    block(buttonIndex);
}

你可能感兴趣的:(iOS-关联对象)