創建關聯要使用到Objective-C的運行時函數:objc_setAssociatedObject來把一個對象與另外一個對象進行關聯。該函數需要四個參數:源對象,關鍵字,關聯的對象和一個關聯策略。當然,此處的關鍵字和關聯策略是需要進一步討論的。
- 關鍵字是一個void類型的指針。每一個關聯的關鍵字必須是唯一的。通常都是會采用靜態變量來作為關鍵字。
- 關聯策略表明了相關的對象是通過賦值,保留引用還是復制的方式進行關聯的;還有這種關聯是原子的還是非原子的。這里的關聯策略和聲明屬性時的很類似。這種關聯策略是通過使用預先定義好的常量來表示的。
下面展示如何將一個對象關聯到一個數組上
NSArray *arr = @[@"1",@"3",@"5",@"7",@"9"];
NSString *str = [[NSString alloc]initWithFormat:@"%@",@"kobe"];
objc_setAssociatedObject(arr, &keychar, str, OBJC_ASSOCIATION_RETAIN_NONATOMIC);//創建關聯
NSLog(@"%@",arr); //此處只是將數組關聯了一個對象,但是并不會講str存入到arr中
NSString *obj_str = (NSString *)objc_getAssociatedObject(arr, &keychar);//獲取關聯的value
NSLog(@"獲取關聯的值:%@",obj_str);
objc_setAssociatedObject(arr, &keychar, nil, OBJC_ASSOCIATION_ASSIGN);//斷開關聯傳入nil,此時關聯策略就不重要了
NSLog(@"%@",(NSString *)objc_getAssociatedObject(arr, &keychar));
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。