OC關(guān)聯(lián)對(duì)象之objc_setAssociatedObject的使用

對(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);

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容