"une fois codé en objective C est ce que je peux le publier pour des systèmes autre que mac et ios ? "
ça dépends de la librairie utilisée (cocos2D existe en une version C++ qui est utilisable sur pas mal de supports), mais y aura toujours du travail de portage car l'objective-C est un langage utilisable que pour mac (langage propriétaire).
Cocos2D est une librairie graphique 2D, elle sert à te donner des fonctions qui permettent de faire des appels graphiques donc à afficher des images et leur appliquer des transformations diverses.
Unity est un moteur 2D/3D, le code à fournir dessus se rapporte à du scripting, pour plus d'informations vaut mieux se renseigner sur le site officiel.
Différence principal : Unity permet de faire de la 2.5D et de la 3D là où cocos2D permet juste de faire de la 2D.
Mais en utilisant cocos2D tu as un accès plus libre au fonctionnement de ton jeu et tu disposes d'un controle réel sur le code que tu fais.
Cocos2D est gratuit et libre de droit comparé à Unity qui est payant (licence) en cas d'utilisation commercial.