Я искал документацию для cocos2d-x, но она кажется очень плохой, если не считать самых основ. Я понимаю, что мои собственные классы должны наследоваться от CCObject
, чтобы иметь возможность использовать (изначально какао) механизм retain
/release
, но я все еще не понимаю, что происходит, когда вы что-то new
делаете. init
не вызывается автоматически. можно ли вызывать его из конструктора? только это гарантирует, что мой объект будет начинаться с счетчика ссылок, равного 1? что такое CC_SAFE_DELETE
и когда его использовать? release
и autorelease
работают точно так же, как в какао? как насчет CC_SYNTHESIZE
? Мне просто нужно увидеть правильно закодированный пример класса (и его создание/уничтожение), чтобы понять, что я должен делать, чтобы не напортачить и не оставить утечек памяти. благодарю вас.
правильное создание экземпляров и управление памятью в cocos2d-x
Ответы (2)
Если вы посмотрите на код класса CCObject, то увидите, что в его конструкторе счетчик ссылок установлен в 1. Итак, создание объекта с помощью new
правильно. Init не вызывается, потому что в классе CCObject нет такого метода. Обычно я предпочитаю создавать объекты с помощью статического конструктора. Что-то вроде
MyClass* MyClass::createInstance()
{
MyClass* object = new MyClass();
// you can create virtual init method
// and call it here
if( initWasSuccessful )
{
object->autorelease();
}
else
{
CC_SAFE_RELEASE_NULL(object);
}
return object;
}
Про все макросы типа CC_SAFE_DELETE — вы можете узнать их в коде cocos2dx. Эти макросы просто проверяют, является ли объект NULL, чтобы предотвратить сбой при попытке вызвать метод выпуска.
Ответ, предоставленный Морионом, великолепен, я просто хотел бы добавить несколько полезных ссылок по этому вопросу.
Здесь вы можете найти официальное управление памятью на странице Cocos2d-x: Memory Управление в Cocos2d-x
Эта страница форума также содержит некоторые дополнительные сведения и разъяснения по этому поводу: Освобождение памяти в Cocos2d-x
Наслаждайтесь кодированием!