Выражается это тем, что при попытке инициализации NSURL строкой с кириллическими знаками:
NSURL *url = [NSURL URLWithString:@"http://server.com/dir/петя"]; возвращается nil. Xотя с адресами вроде "http://server.com/folder/peter" все проходит хорошо (обратное было бы весьма печально). Это ошибка самого NSURL, причем не только на iPhone, но и на Mac OS X. Проблему решает IFUnicodeURL - категория NSURL, написанная в IconFactory. Работает очень просто:
NSURL *url = [NSURL URLWithUnicodeString:@"http://server.com/dir/петя"];
Маленький совет с WWDC 2010
for (id key in dic) работает быстрее, чем for (NSString *key in dic), так как не выполняется операция приведения к типу. Вещь вполне очевидная, но может кто не задумывался.
Легкое вскрытие retain/release
Недавно отвечал на вопрос об утечке памяти при использовании строк, "впаянных" в код. К таким строкам можно обращаться как к объектам NSString*:
[@"string" substringToIndex:3];
При этом примечательно, что [@"str" retainCount] возвращает 2147483647 (NSIntegerMax). То же самое для [[@"str" release] retainCount]. Память под такие строки выделяется не в autorelease pool, а в constant pool, поэтому на них не действуют обычные правила с подсчетом ссылок. Тут же захотелось проверить:
Из всего этого извращения можно выделить некоторые особенности работы методов retain/release у NSObject:
- Нет проверки на переполнение счетчика
- Для retain нет проверки на значение retainCount (что вполне логично)
- У обоих методов есть проверка на то, где хранится объект - в autorelease pool / constant pool.
NSTiffSplitter
На работе появилась потребность в просмотре многостраничных TIFF файлов на iOS девайсах (хотя это не мой проект (outsource), и поэтому это не мое дело). Стандартный же UIImageView позволяет просматривать только первые страницы. Также видел несколько вопросов на Stackoverflow, где люди интересовались библиотеками, позволяющими полностью просматривать такие файлы. В итоге сел на выходных и за часов 10 написал. Я редко спускаюсь на уровень общения с байтами, поэтому данный момент был для меня весьма необычен. В итоге - очень весело, полезно и интересно. Надо выбрать себе подобную цель покрупнее)
Когда выложу проект (проектик) на Github, расскажу в отдельном посте об интересных моментах , встретившихся при его написании.
Thank you very much for releasing it. I just found out about it and will be using it on an application shortly.
ОтветитьУдалить