2011-05-13 49 views

回答

6

您正在以文檔未明確支持的方式使用API​​。因此,當OS X/iOS的下一次更新中斷時,您無法投訴。這是謹慎的原因之一。

The documentationOBJC_ASSOCIATION_ASIGN設置了一個弱引用。這意味着垃圾收集情況中的一件不平凡的事情,所以要小心。

如果有辦法以官方支持的方式做事情,我更喜歡它。在你的情況下,使用NSStringFromSelector會立即讓你的代碼得到支持。

3

這是一個壞主意。正如Yuji所說,你違反了文檔中定義的API。如果您確實想要存儲任意值,請在NSValue中換行並將其存儲爲OBJC_ASSOCIATION_RETAIN_NONATOMIC

- (void) associateSelector:(SEL)value withPointer:(void*)key { 
    NSValue *nsvalue = [NSValue valueWithBytes:&value objcType:@encode(SEL)]; 
    objc_SetAssociatedObject(self, key, nsvalue, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
} 
相關問題