Содержание материала

«В самом языке Objective-C нет специальных команд для создания и уничтожения объектов (подобных new и delete). Эта задача ложится на runtime-библиотеку и реализуется при помощи механизма посылки сообщений.»

Это прелесно.

«Mac OS X (как и NextStep) для управления временем жизни объектов используют reference counting - каждый объект содержит внутри себя некоторый счетчик, при создании устанавливаемый в единицу. Посылка объекту сообщения retain увеличивает значение этого счетчика на единицу (так все контейнерные классы библиотеки Foundation при помещении в них объекта, посылают ему сообщение retain). Установившейся практикой является посылка объекту сообщения retain всеми, заинтересованными в нем сторонами (объектами), т.е. если вы запоминаете ссылку на объект, то следует послать ему сообщение retain. Когда объект перестает быть нужен, то ему просто посылается сообщение release.»

Подобное несомненно повышает безопасность программ и резко снижает количество ошибок допускаемых при управлении ресурсами. Если Объектный С полностью совместим с С то что будет если я вызову malloc? Что будет если я вызову realloc?

«Язык Objective-C обладает крайне редко встречающейся возможностью добавлять новые методы к уже существующим классам. При этом не требуется исходников класса и добавленные методы автоматически становятся доступными всем классам, унаследованным от изменяемого.»

Очень инетересно узнать, что произойдет если две библиотеки от разных производителей начнут добавлять методы в какой-либо third-side класс, причем не просто добавлять новые методы а переопределять уже существующие. Очень интересно как будет происходить отладка этого приложения. Есть мнение что для отладки декалитрами кофе уже не обойтись. Понадобится феназепам, а может что-нибудь ещё по-круче.

«Еще одной интересной особенностью является возможность инициализации class object'ов - в начале работы приложения каждому class object'у посылается сообщение (класса) initialize.»

Что? Опять ручное управление ресурсами?

В конце ещё раз повторюсь, что не было желания кого-то или что-то закозлить а кого-то или что-то оправдать. Просто было желание показать, что врут все кто говорят, что недостатков нет, все кто говорят что проблем нет, никогда c настоящими проблемами не сталкивались, все кто говорят что реализована замечательная фича, никогда не задумывались о том что лежит в основе этой фичи. Ибо любое внедрение козырной фичи в конце концов приводит к жесткому самоограничению. Так было с наследованием, с множественным наследованием, там было с глобальными переменными и пр.

Добавить комментарий


Защитный код
Обновить