Разработка приложений для iPhone с C ++? - PullRequest
0 голосов
/ 14 марта 2011

Я написал несколько небольших программ на Objective-C (для iPhone), но в конечном итоге я хочу писать свои программы в основном на C ++. (Я просто нахожу это намного проще.)

Если это правда, как бы я:

  1. Управление памятью в C ++? (Есть ли в C ++ команда типа релиза, которую мне нужно использовать?)
  2. Смешивание C ++ и кодирование Objective-C? (Или даже, я должен?)
  3. Взять объект C ++, например строку, и преобразовать его в строку NSString?

Спасибо! Дерек

Ответы [ 2 ]

1 голос
/ 14 марта 2011
  1. Да.C ++ имеет ключевое слово delete, но оно применяется только к объектам, которые вы создали с помощью new (что для идиоматического кода C ++ не каждый объект).C ++ также не имеет встроенного подсчета ссылок, только чистое владение.

  2. Если вы создаете исходный файл с расширением .mm, он компилируется как Objective-C ++, что позволяетВы смешиваете код Objective-C и C ++.

  3. Для строки вы можете вызвать std::string::c_str(), чтобы получить строку, которую вы можете передать в +[NSString stringWithUTF8String:].

Мои два цента: если вы чувствуете, что C ++ намного проще, чем Objective-C, и вы ничего не знаете об управлении памятью в C ++, вам следует потратить немало времени на изучение чистого C ++;в C ++ очень легко выстрелить себе в ногу, если ты не знаешь, что делаешь.

0 голосов
/ 14 марта 2011

Управление памятью в C ++? (Есть ли в C ++ команда типа релиза, которую мне нужно использовать?)

c ++ использует new и delete. в частности, программы на c ++ предпочитают использовать управление ресурсами, связанными с областью действия (SBRM). управлять динамическими распределениями очень просто, когда вы используете эти контейнеры. однако подсчет ссылок в настоящее время не встроен в язык - вы можете использовать boost www.boost.org для более сложных контейнеров указателей, включая те, которые предлагают подсчет ссылок.

Смешивание C ++ и кодирование Objective-C? (Или даже, я должен?)

Вы можете легко сделать это, используя расширение .mm или .M, или используя флаг компилятора. обратите внимание, что вы не должны просто включать все как objc ++ - это повредит вашему времени сборки. Также обратите внимание, что есть несколько ограничений, в том числе невозможность подклассировать типы c ++ как типы objc и наоборот. Еще один важный флаг, который включил бы любой здравомыслящий разработчик c ++, - это тот, который генерирует вызовы конструктора / деструктора c ++, когда вы используете типы c ++ в качестве переменных в ваших классах objc. в противном случае вы просто потерпите крах, будете вынуждены использовать pimpl или вам придется вручную создавать / уничтожать все ваши экземпляры c ++ (как ivars в типах objc). это означает, что все используемые вами типы будут нуждаться в конструкторах по умолчанию. Вы можете смешивать языки, это хорошо, если вы предпочитаете это. Есть еще несколько примечаний по их смешиванию в документах Apple, но они являются важными ... о, и будьте осторожны, чтобы изолировать ваши исключения (что вы также должны сделать с objc).

Взять объект C ++, например строку, и преобразовать его в строку NSString?

см. Ответ Джона Калсбека

удачи

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