Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Is this correct behavior?



On Jun 30, 2005, at 4:10 AM, Rune Lindman wrote:

Moving from GCC 4 to 3.3 is a much larger step for me than moving from CW to Xcode. I encountered several small issues with code that used to work but suddenly stopped. Most where easy to get around by rearranging the code.

Now I'm totally stuck on a problem. I have code that used to work fine but stopped to work either when I moved from GCC 4 to 3.3 or I changed some settings in Xcode. Have I been getting away with something illegal before or is there a problem/setting I missed?

This does not work (key is not found in dictionary):
-------------
#define kMyKey CFSTR("myKey")

CFMutableDictionaryRef dictRef = ::CFDictionaryCreateMutable(nil, 0,nil,nil);
CFDictionarySetValue(dictRef,kMyKey,CFSTR("myValue"));
CFStringRef returnedValue = CFDictionaryGetValue(dictRef,kMyKey);
CFShow(returnedValue); // null


This works:
-------------
#define kMyKey CFSTR("myKey")

CFStringRef key = kMyKey;
CFMutableDictionaryRef dictRef = ::CFDictionaryCreateMutable(nil, 0,nil,nil);
CFDictionarySetValue(dictRef,key,CFSTR("myValue"));
CFStringRef returnedValue = CFDictionaryGetValue(dictRef,key);
CFShow(returnedValue); // "myKey"


Grateful for any hints!

You are passing NULL for the key and value callbacks. You should be using the appropriate standard callback blocks from CFDictionary.h instead of NULL.


Using NULL has several implications when putting CFTypes into a dictionary. One is that the dictionary cannot retain/release your values for you, so you must make sure the values lives longer than the dictionary. Another side effect of this is that the dictionary has to use pointer equality tests instead of a logical equals on your keys, which is why you aren't getting the value back as you expected. (The implementation reason for this is that CFSTR can make real static strings, or is a macro that makes a singleton at runtime, depending on the compiler and settings in use.)

Jim
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Xcode-users mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/xcode-users/email@hidden

This email sent to email@hidden
References: 
 >Is this correct behavior? (From: Rune Lindman <email@hidden>)



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.