Associated Objects 主要有如下三個使用場景:函數
一、爲現有的類添加私有變量以幫助實現細節spa
二、爲現有的類添加公有屬性;code
三、爲 KVO 建立一個關聯的觀察者。對象
關聯函數一共有3個:ci
void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy);
id objc_getAssociatedObject(id object, const void *key);
void objc_removeAssociatedObjects(id object);
OBJC_ASSOCIATION_ASSIGN = 0, //弱引用關聯對象rem
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, //強引用關聯對象,且爲非原子操做get
OBJC_ASSOCIATION_COPY_NONATOMIC = 3, //複製關聯對象,且爲非原子操做io
OBJC_ASSOCIATION_RETAIN = 01401, //強引用關聯對象,且爲原子操做class
OBJC_ASSOCIATION_COPY = 01403 //複製關聯對象,且爲原子操做變量