Skip navigation.
 
mlRe: NSMapTable with pointer keys ?
FROM : Guillaume Laurent
DATE : Thu Mar 27 18:14:55 2008

On Mar 27, 2008, at 17:51 , Benjamin Stiglitz wrote:

>> [NSMapTable 
>> mapTableWithKeyOptions:NSMapTableObjectPointerPersonality 
>> valueOptions:NSMapTableStrongMemory]
>>
>> (reading the doc for NSMap, I figured these are the right options)
>>
>> However, when trying to fetch an object with a void* key to check 
>> for its presence (using the C api as recommended)
>>
>> NSMapGet(myMap, aKey);
>>
>> I get an instant crash and looking at the stack trace, it's because 
>> aKey is being sent an ObjC message, to which it will hard time 
>> replying since it's not an NSObject in the first place.

>
> That’s because you’ve marked the keys as being object pointers; 
> you’ve got your key and value pointer functions reversed.


Just tried, exact same crash. :-(


> (Also be sure you want the StrongMemory personality, and not 
> OpaqueMemory.)



Ah, there seem to be a documentation problem here. The NSMapTable doc 
only lists the following personalities as being available :

    NSMapTableStrongMemory            = 0,
    NSMapTableZeroingWeakMemory        = 
NSPointerFunctionsZeroingWeakMemory,
    NSMapTableCopyIn                  = NSPointerFunctionsCopyIn,
    NSMapTableObjectPointerPersonality = 
NSPointerFunctionsObjectPointerPersonality

It also says in the overview section that "only the options listed in 
“Personality Options” guarantee that the rest of the API will work 
correctly". So should I really use NSPointerFunctionsOpaqueMemory 
(which has no documentation either except that it's "Available in Mac 
OS X v10.5 and later") ?

I suppose OpaqueMemory would fit, though, since what I want is to use 
the void* values as index keys, what they are pointing to is 
irrelevant at this stage (it's a C++ object).

--
Guillaume
http://telegraph-road.org

Related mailsAuthorDate
mlNSMapTable with pointer keys ? Guillaume Laurent Mar 27, 16:24
mlRe: NSMapTable with pointer keys ? Benjamin Stiglitz Mar 27, 17:51
mlRe: NSMapTable with pointer keys ? Guillaume Laurent Mar 27, 18:14
mlRe: NSMapTable with pointer keys ? Guillaume Laurent Mar 27, 18:17
mlRe: NSMapTable with pointer keys ? Guillaume Laurent Mar 28, 00:20