I recently selected Objective-C and cocos2d at the same time. At first, I read a lot about Objective-C to give me a tutorial. Besides syntax, most of this knowledge remains unused in my game. The most important things to learn about Objective-C before you start learning cocos2d are memory management and debugging.
Managing the counter’s memory can take about a minute to get used to what languages you are in. The general rule is that if you wrote / copied (without autorelease) or saved it, you should release it at some point, and if you need to use something outside the current area, you must save it. You can see from some cocos2d examples of rewriting the dealloc method of objects to free up everything that you created / saved.
Debugging took me a minute to get used to. This helps if you add a high-level try / catch block that you can use to catch thrown exceptions, otherwise some of your errors will give you little information to continue. You can also research / ruin some parameters of your project to provide a better trick of errors, for example, including zombies. The big cause of crashes in Objective-C is sending messages to already freed objects. As soon as you encounter a badaccess error that you cannot understand, basically you will be forced to get a knee in this material to find out the reason.
Some other useful Objective-C knowledge that comes in handy is very familiar with how NSArray and NSDictionary work, how they automatically save / release, and how they can hold objects (without primitive values). To work with float / int and arrays / dictionaries, you need to convert the primitives into something like an NSNumber object, which can be done quite easily with a little research. Another useful task is to know how to save / load layers. Convenient methods exist for this in NSArray and NSDictionary objects. This, along with a little knowledge of NSFileManager, should be enough to help you save / load game states. If you want to get some fantasy / clarity in coding, you'll also learn about observers in objective-c. KVO can be great for automatically updating your user interface when changing the properties of certain objects. For example, my HUD KVOs are for the player’s life, so when the life value changes, the HUD is automatically updated. This may allow you to make a cleaner application like MVC. You can also register to listen to other types of messages (not just property changes), just make sure you unregister your listeners when you are finished listening.
My final tip is to always pay attention to Xcode warnings. If you get it and you don’t know why, you should find out why. Some simple ones that you might ignore, others may cause errors that you cannot track in any other way. For example, I once used the max () function in my code, and xcode gave me a strange warning that I did not understand. This caused chaos in my program, damaging the stack. When I changed max () to MAX (), three or four inexplicable errors instantly disappeared. Things like this can help you go back and seriously comb every part of your code if you don't understand it right away.
You can basically find out the rest by looking at the code / examples of cocos2d. Good luck.