Расширение комментария @ Винса (я не уверен, почему это не был ответ!).,,.
Где происходит сбой, если вы делаете
CGRect playerRect = player.frame;
CGRect enemyRect = enemy.frame;
if (CGRectIntersectsRect(playerRect, enemyRect)) {
вместо
if(CGRectIntersectsRect(player.frame,enemy.frame)) {
Это должно сказать вам, какой (или оба) объект был освобожден.