在xcode4 / Objective C中,在Leopard上:
我有一个CGDisplayModeRef
,据我所知它是一个不可变字典参考。
我需要修改它,所以我试图得到一个像这样的可变副本:
CGDisplayModeRef displayMode = CGDisplayCopyDisplayMode(kCGDirectMainDisplay);
NSMutableDictionary * displayModeMutable =
[((NSDictionary *)&displayMode) mutableCopy];
奇怪的是,我收到了一封包含我的App代表的字典! 这样做的正确方法是什么?
顺便说一句,我想将CRT显示器的刷新率设置为100 Hz,我知道硬件支持但是Leopard认为它没有!所以我需要手动更改“displayMode”
中的刷新率答案 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
。