CoreFundation引用类型的可变副本

时间:2011-05-03 17:16:57

标签: objective-c core-graphics core-foundation

在xcode4 / Objective C中,在Leopard上:

我有一个CGDisplayModeRef,据我所知它是一个不可变字典参考。 我需要修改它,所以我试图得到一个像这样的可变副本:

 CGDisplayModeRef displayMode = CGDisplayCopyDisplayMode(kCGDirectMainDisplay);
 NSMutableDictionary * displayModeMutable = 
                   [((NSDictionary *)&displayMode) mutableCopy];

奇怪的是,我收到了一封包含我的App代表的字典! 这样做的正确方法是什么?

顺便说一句,我想将CRT显示器的刷新率设置为100 Hz,我知道硬件支持但是Leopard认为它没有!所以我需要手动更改“displayMode”

中的刷新率

1 个答案:

答案 0 :(得分:1)

  

我有一个CGDisplayModeRef,据我所知它是一个不可变字典参考

不,我不这么认为;你混淆了返回CGDisplayCurrentMode的10.5函数CFDictionaryRef和10.6函数CGDisplayModeRef。后者 a CFDictionaryRef

使用10.6功能支持的唯一功能是通过CGDisplayCopyAllDisplayModes获取可用模式列表,选择一个符合您目的的模式,然后使用CGDisplaySetDisplayMode进行设置。作为未来扩展的准备工作,CGDisplaySetDisplayMode接受选项CFDictionaryRef,但您目前无法使用它。

顺便说一句,即使您将CFDictionaryRef投射到NSDictionary,也会有一个&太多。 ...Ref已经是指针,所以

CFDictionaryRef a;
NSDictionary* b=(NSDictionary*)a;

应该足够了。您不应该使用(NSDictionary*)&a