對(duì)象關(guān)聯(lián)類型
關(guān)聯(lián)類型 | 等效的@property屬性 |
---|---|
OBJC_ASSOCIATION_ASSIGN | assign |
OBJC_ASSOCIATION_RETAIN_NONATOMIC | nonatomic,retain |
OBJC_ASSOCIATION_COPY_NONATOMIC | nonatomic,copy |
OBJC_ASSOCIATION_RETAIN | retain |
OBJC_ASSOCIATION_COPY | copy |
管理關(guān)聯(lián)對(duì)象的方法:
objc_setAssociatedObject(id object, void * key, id value, <objc_AssociationPolicy policy)
以給定的key為對(duì)象設(shè)置關(guān)聯(lián)對(duì)象的value
objc_getAssociatedObject(id _Nonnull object, const void * _Nonnull key)
根據(jù)key從對(duì)象中獲取相應(yīng)的關(guān)聯(lián)對(duì)象的value
objc_removeAssociatedObjects(id _Nonnull object)
移除所有關(guān)聯(lián)對(duì)象
使用時(shí)通常使用靜態(tài)的全局變量做key
demo:
static void *MKEAlterViewKey = "MKEAlterViewKey";
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"123" message:@"345" delegate:self cancelButtonTitle:@"cancels" otherButtonTitles:@"jixu", nil];
void (^block)(NSInteger) = ^(NSInteger buttonIndex){ };
//block 為value MKEAlterViewKey為key 與對(duì)象alert關(guān)聯(lián)
objc_setAssociatedObject(alert, MKEAlterViewKey, block, OBJC_ASSOCIATION_COPY);
[alert show];
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
//獲取value
void (^blcok)(NSInteger) = objc_getAssociatedObject(alertView, MKEAlterViewKey);
blcok(buttonIndex);
}