Разница между CFMutableArray и NSMutableArray? - PullRequest
3 голосов
/ 18 ноября 2009

В чем разница между NSMutableArray и CFMutableArray?

В каких случаях мы должны использовать один или другой?

Ответы [ 3 ]

14 голосов
/ 18 ноября 2009

CFMutableArray и NSMutableArray являются C- и Objective-C-эквивалентами одного типа. Они считаются парой типа «бесплатный мост», что означает, что вы можете разыграть CFMutableArrayRef до NSMutableArray* (и наоборот), и все будет работать. Случаи, когда вы будете использовать один поверх другого, это простота использования (вы используете C или Objective-C?) Или совместимость с API, который вы хотели бы использовать. Подробнее здесь .

1 голос
/ 18 ноября 2009

API OSX являются многоуровневыми, есть базовые низкоуровневые API, которые создаются самостоятельно, а затем на их основе создаются более богатые API, в свою очередь использующие сами API более низкого уровня.

CFMutableArray является частью инфраструктуры CoreFoundation и используется API-интерфейсами более низкого уровня. NSMutableArray (я полагаю, что NS означает NextStep) является частью платформы Foundation и используется в API более высокого уровня, таких как AppKit или Cocoa.

То, что вы должны использовать, зависит от того, где вы работаете. Если вы работаете в насыщенном пользовательском интерфейсе с использованием Cocoa, NSMutableArray - это правильный выбор. Если вы работаете с демоном, драйвером или чем-то еще, просто используя CoreFoundation, используйте CFMutableArray.

К счастью, как указано выше, многие из этих типов CF / NS являются бесплатными мостовыми соединениями, поэтому вы можете использовать API-интерфейсы CoreFoundation, например, с. Какао без необходимости постоянно конвертировать типы.

1 голос
/ 18 ноября 2009

Во время выполнения они идентичны. Они одинаковые, они являются платными мостовыми типами - вы можете безопасно (и эффективно) приводить один к другому.

Это разные типы, доступные на разных / перекрывающихся языках.

CFMutableArrayRef - интерфейс непрозрачного объекта C NSMutableArray * - это интерфейс Objective-C

Они могут быть свободно взаимозаменяемыми, и различие заключается в объявлении, в котором говорится, что один является указателем на непрозрачный тип по сравнению с объектом objc.

Кроме того, вы можете (что-то вроде - требует немного больше реализации, чем обычно) подкласса типа NSMutableArray, используя objc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...