Objective-C의 약한 키를 가진 ActionScript 3의 Dictionary
개체와 유사한 것을 가질 수 있는지 궁금합니다. 클래스의 인스턴스를 다른 임의의 인스턴스에 '첨부'할 수 있기를 원합니다.Objective-C의 weak-keyed dictionary
예;
MetaData *meta = [MetaData metaDataForObject:someObject];
meta.whatever = foo;
이상 :
foo = [MetaData metaDataForObject:someObject].whatever;
[foo doStuff];
까다로운 부분은이 someObject
에 의해 참조 이의를 제기 한 후, 나는 가정, meta
가 참조하는 객체가 해제 (그리고 dealloc'd 싶은 dealloc'd된다는 것이다 클라이언트 코드는 그것을 유지하지 않는다).
가능합니까? 나는 +[NSValue valueWithNonretainedObject:]
을 보았다. 그러나 이것이 내가 나중에 쿼리 할 때 내가 원하는 이유인지 확실하지 않다. -[NSValue nonretainedObjectValue]
쓰레기에 대한 포인터를 얻을 수있는 것처럼 보인다 (객체가 dealloc'd되었을 때 어떻게 NSValue 0 포인터가 될 수 있었 을까?).
감사합니다,
벤자민
업데이트 2011년 9월 23일 : 나는이 작업을 수행 할 수있는 방법은 objc_setAssociatedObject
및 관련 기능을 믿습니다. Objective-C Runtime Reference을 참조하십시오.
방법 swizzling 꽤 똑바로 소리. 당신이 말한 isa-swizzling 기술에 대해 자세히 설명해 주시겠습니까? 내가 이해하면 객체의 클래스를 효과적으로 변경하여
dealloc
의 새로운 구현을 제공 할 수 있습니까? – bvanderveen네, 맞습니다. –
또한 10.5에는이를 위해 사용할 수있는 함수가 있으며, 이는 앞으로 유용 할 것입니다. http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html#//apple_ref/ c/func/object_setClass –