Смешивание C ++ и Objective-C
Я использую C ++ в качестве основы приложения и Objective-C для графического интерфейса, это нормально.
Но когда дело доходит до смешивания этого кода в Objective-C ++ (файл .mm), у меня возникает несколько вопросов:
1. Могу ли я смешивать контейнеры STL с объектами Objective-C или Cocos2D?Например. В заголовке Objective C я могу сделать следующее?
#include <vector>
#include <boost\shared_ptr.hpp>
@interface MyClass : NSObject {
std::vector<boost::shared_ptr<CCSprite> > m_spriteList;
}
А потом в.mm
файл, я хочу сделать
CCSprite* newSprite = [/* cocos2d stuff here... */];
m_spriteList.push_back(newSprite);
Действителен ли приведенный выше код? Это, конечно, в C ++, но я не уверен, когда смешиваю C ++ и Objective-C и Cocos2D.
2. Управление памятью с использованием C ++ объекта смарт-указателя в Objective-C?Когда я пытаюсь использовать код C ++ в Objective-C, я хочу объявить объект C ++ как переменную-член в заголовочном файле Objective-C.
Скажем, у меня есть класс C ++, объявленный вtest.h
заголовок:
Test{
};
В заголовочном файле Objective-C я хочу сделать
#include "test.h"
#incude <boost/scoped_ptr.hpp>
#include <vector>
@interface MyClass : NSObject {
Test* m_testObjectPtr; // (1)
boost::scoped_ptr<Test> m_testOjbSmartPtr; // (2)
}
В приведенном выше коде, (2) хорошо? Могу ли я использовать умные указатели в Objective-C так же, как в коде C ++? И могу ли я взять на себяTest
деструктор класса будет вызван, когдаMyClass
объект уничтожен?
Или, если (2) не в порядке в Objective-C ++, (1) нормально? Нужно ли мне вручную звонитьdelete m_testObjectPtr
вdealloc
?