Изменчивая копия типа ссылки CoreFundation - PullRequest
1 голос
/ 03 мая 2011

В xcode4 / Objective C, на Leopard:

У меня есть CGDisplayModeRef, который, как я понимаю, является неизменным справочником словаря. Мне нужно изменить это, поэтому я попытался получить изменяемую копию, как это:

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

Как ни странно, я получаю словарь, содержащий моего делегата от приложения! Как правильно это сделать?

Кстати, я хочу установить частоту обновления дисплея CRT на 100 Гц, которую, как я знаю, аппаратное обеспечение поддерживает, но Леопард считает, что это не так! Поэтому мне нужно вручную изменить частоту обновления в «displayMode»

1 Ответ

1 голос
/ 03 мая 2011

У меня есть CGDisplayModeRef, который, как я понимаю, является неизменным словарным справочником

Нет, я так не думаю;Вы путаете функцию 10.5 CGDisplayCurrentMode, которая возвращает CFDictionaryRef, и функцию 10.6 CGDisplayModeRef.Последний вариант - , а не a CFDictionaryRef.

. Единственное, что поддерживается с помощью функций 10.6, - это получить список доступных режимов с помощью CGDisplayCopyAllDisplayModes, выбрать тот, который соответствует вашим целям, и установитьэто обратно с CGDisplaySetDisplayMode.В качестве подготовки к расширению в будущем CGDisplaySetDisplayMode принимает параметры как CFDictionaryRef, но вы не можете использовать их в настоящее время.

Кстати, даже когда вы разыгрываете CFDictionaryRef на NSDictionary, у вас слишком много &....Ref уже является указателем, поэтому

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

должно быть достаточно.Вы не должны использовать (NSDictionary*)&a.

...