Как стать автором
Обновить

Парадигмы и политики Foundation Framеwork (Foundation Paradigms and Policies)

Время на прочтение 3 мин
Количество просмотров 687
Автор оригинала: Apple
С одной стороны, перевод официальной документации не очень интересная вещь, с другой — этот перевод не встретишь нигде, сама документация написана достаточно живым языком, да и, собственно, — это мой личный блог. Но может быть, эта заметка будет интересна другим программистам, работающих на Маках.

Foundation представляет несколько парадигм и политик для программирования в Cocoa, чтобы обеспечить согласованное и ожидаемое поведение объектов программы в различных ситуациях. Они включают:

Удержание и отпускание объектов (Object retention and object disposal). Objective-C и Foundation предоставляют Cocoa два способа обеспечить существование объектов, когда они нужны, и освобождения их, когда объекты становятся ненужными. Сборщик мусора (Garbage collection), появившийся в Objective-C 2.0, автоматически отслеживает и управляет объектами, в которых ваша программа уже не нуждается, освобождая таким образом память. Foundation также по-прежнему предоставляет традиционный способ управления памятью. Он основывается на политике владения объектами, которая предусматривает, что объекты являются ответственными за освобождение (релиз, releasing), других объектов, которые они создали, скопировали или явно взяли во владение (заретейнили, retained). NSObject (класс и протокол) определяет методы ретейна (retaining) и релиза (releasing) объектов. Пул авторелиза (определенный в классе NSAutoreleasePool) осуществляет механизм отсроченного релиза и предоставляет возможность Cocoa-программе иметь согласованную договорённость о возвращении объектов, за которые вызывающий метод не ответственен. Чтобы узнать больше о сборщике мусора и управления памятью, смотрите Object Retention and Disposal

Изменяемые разновидности классов (Mutable class variants). Множество переменных и классы контейнеров имеют в Foundation изменяемые варианты неизменяемых классов, причём изменяемый класс всегда является наследником неизменяемого. Если вы нуждаетесь в динамическом изменении инкапсулированной переменной или члене класса, вы можете создать экземпляр изменяемого класса. Так как он является наследником неизменяемого класса, вы можете передавать изменяемый объект методам, которые требуют неизменяемый тип. Больше о изменяемых объектах смотрите Object Mutability

Кластеры классов (Class clusters). Кластер классов — это абстрактный класс и набор приватных конкретных классов, для которых абстрактный класс является интерфейсом-зонтиком. В зависимости от ситуации (а особенно, от способа, которым вы создали объект), объект будет иметь подходящий класс, который будет возвращаться вам. NSString и NSMutableString, например, действуют как посредники для объектов различных приватных подклассов, оптимизированных для различных видов хранимой информации. С течением времени, набор конкретных классов изменялся несколько раз без нарушения работы программ. Чтобы узнать больше о кластерах, смотрите Class Clusters

Уведомления (Notifications). Уведомление — важный паттерн программирования в Cocoa. Он основан на механизме широковещательного уведомления (broadcast mechanism), который позволяет объектам (называемым наблюдателями, observers) быть в курсе того, что делает другой объект или получать информацию о пользовательских или системных событиях. Объект, порождающий уведомление, может не знать о существовании или отличительных особенностях получателя уведомления. Существует несколько типов уведомлений: синхронное, асинхронное и распределенное. Механизм уведомленияFoundation-фреймворка реализуется с помощью классов NSNotification, NSNotificationCenter, NSNotificationQueue, and NSDistributedNotificationCenter. Чтобы узнать больше информации об уведомлениях, смотрите Notifications
Теги:
Хабы:
+1
Комментарии 1
Комментарии Комментарии 1

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн