Finder в Mac OS X 10.6 переписали на Cocoa. Какая разница, на чем он написан, если он остался почти таким же? Большая разница! ОГРОМНЕЙШАЯ.
Я уже писал, что Apple почти не делает “теоретических” фреймворков, которые сама не использует. В Apple пишут программы, под которые делаются фреймворки, которые потом публикуются для сторонних разработчиков. Именно поэтому переписка Finder на Cocoa — это большой подарок программистам.
Так как Finder был написан на Carbon, все серьезные операции с файлами были на карбоновой стороне света. В Cocoa некоторые тоже были, но NSFileManager был настолько медленный, что любой обход директорий приходилось писать с FSRef и сишным API, а то и совсем в BSD уходить. Работа с алиасами и символьными ссылками — опять туда же. Лэйблы (цвета для файлов в Finder), по-моему, то ли совсем нельзя было читать, не залезая в .DS_Store, то ли можно было, но через одно место.
С выходом Snow Leopard наступило счастье. Apple пришлось доработать библиотеки, чтобы написать Finder на Cocoa. Что нового?
- Унифицирован доступ к файлам. Если раньше это делалось через строку с путем к файлу, через
FSRefилиNSURL, то теперь нам дали единый и универсальный способ —NSURL. NSFileManagerтеперь быстро обходит директории.- В
NSURLпоявились методы для запроса атрибутов файла: можно получать цвета и названия лэйблов, локализованное имя файла (какое показывается в Finder), даты, размер и иконки, а так же информацию о том, является ли директория бандлом. - К предыдущему пункту — если раньше иконки брались через
NSWorkspace(но он не выдавал иконки с маленькими стрелочками в левом нижнем углу для алиасов и символьных ссылок), то теперь иконку можно запросить уNSURL(со всеми стрелочками для ссылок!). - Появились bookmarks — в них сериализуется
NSURL. NSURLтеперь может содержать идентификатор файла вместо пути, то есть, URL будет указывать на файл даже если его переименуют или переместят.- и еще много всего, о чем можно почитать в Foundation Release Notes.

Я уже попробовал написать “мини Finder” используя только Cocoa. Вместо ковыряния разных API и обзывания Apple нехорошими словами, как это было раньше, я получил много удовольствия. Если каждую новую версию Mac OS X оценивать по количеству строк кода, которых не надо писать разработчикам, то 10.6 вышел отличным релизом.
PS Кстати, видите на картинке дату “Сегодня”? Если раньше это надо было делать вручную, то в Snow Leopard у NSDateFormatter есть опция setDoesRelativeDateFormatting:, которая включает выдачу локализованных “вчера”, “сегодня” и даже “позавчера” вместо цифр (и нормальную дату, если ее нельзя выразить словами). Несколько десятков строк кода можно удалять.
