У нас есть некоторые клиенты военной промышленности, которые используют UDT (основанная на UDP Передача данных) (см. http://udt.sourceforge.net/ ), и очень довольны им. Я вижу, что это, имеет дружественную лицензию BSD также.
Объект, который вы определили -changeFont:
, должен быть первым респондентом или выше него в цепочке респондентов. Вы не указали, где вы определили метод, но я предполагаю, что он находится на объекте контроллера, которого нет в цепочке респондента.
Делегат NSFontManager
существует в первую очередь для фильтрации шрифтов, которые он передает на панель шрифтов через -fontManager: willIncludeFont:
.
Как упоминает kperryua, -changeFont:
отправляется вверх по цепочке ответчика. Кнопка, которая запускает меню шрифтов или его внешний вид, может быть хорошим местом для размещения респондента для -changeFont:
.
Вы можете найти руководство Font Handling несколько более полезным чем руководство Панель шрифтов .
Компилятор Java имеет небольшую логику потока, позволяющую инициализировать переменные final
после их объявления. Это законная Java:
final int something;
if ( today == Friday )
something = 7;
else
something = 42;
Java обнаружит, если в какой-либо ветви окончательное значение останется неопределенным. Он не будет анализировать условия, поэтому это незаконная Java, хотя она логически похожа:
final int something;
if ( today == Friday )
something = 7;
if ( today != Friday )
something = 42;
В ANSI C89, const
переменные (кроме extern
) должны быть инициализированы в заявлении, в котором они объявлены.
const int something = ( today == Friday ) ? 7 : 42;
Модификатор extern
в объявлении сообщает компилятору, что переменная инициализируется в другом модуле компиляции (или где-либо еще в этом модуле компиляции).
В ANSI C99 вы можете смешивать объявления и код, поэтому вы можете объявить и инициализировать переменную const
после блока утверждений и кода.