bestanamnetnogonsin:
I found this book. It seems good, but what I want to know is: Are there any "classic" books that you should read if you want to learn objective c? Should I look for books that say they teach Objective c or books specifically for xcode?
If you insist on going with Objective-C (not sure why, unless you only intend to code for iOS), then your best bet is to look into "Objective-C for iOS and Xcode" or something similar. Xcode is basically the development environment and framework for native iOS applications. It uses a variant of Objective-C for the language. I say "variant", because Objective-C is an old language - it was supposed to be the answer to "object oriented C" code - but it never became a standard, and I suspect that almost no one other than Apple supplies an Objective-C compiler. Instead ANSI C++ became the standard (also, IIRC Objective-C was spawned as a commercial product in the hopes of it becoming a standard).
Just note that Objective-C is not the same as C, nor C++; if you are ok with this (and only want to write code for iOS) - then go for it.
Personally - I would move to learn standard ANSI C/C++ (ie - using gcc) - and learn how to use a cross-platform GUI system (so you aren't stuck only developing for one platform or another). You might even consider learning how to create Chrome Apps (DHTML5, javascript, etc); they can be run anywhere Chrome exists - even on a smartphone:
Just about a true "write once, run anywhere" kind of experience (but note, there are a ton of tradeoffs with such a system).
Another possibility to look into might be the "Go" or "Rust" languages; I personally had to learn Go for a project my employer assigned me and a colleague to tackle - it is a very strict language (for instance, if you define a variable, you must use it somewhere, otherwise it won't let you compile!), but honestly it showed where we could do better in software development practices in general. It basically forces you to be a better programmer. At first, it is something you fight against - but over time, it grows on you, and then soon you realize how just about whatever language you were using before has a ton of flaws that let you "get away" with so many things (which in many cases introduce bugs and security holes).
Rust is of a similar vein - but I can't speak to how strict or otherwise it is because I haven't used it outside of the online interactive tutorial (but what I did see intrigued me).
Ultimately, though - don't concentrate on the language - instead, concentrate on the practice and structures of programming. You honestly want to be able to get to a point where you can pick up a new language and run with it (provided it isn't too "esoteric" - for instance, LISP isn't anything like most common computer programming languages). You should be able to "code" in your own made up "pseudo-code". Basically, you want to learn how to take problems, break them up into components, and then be able to describe in some form of a formal code "language" (whether made up or an actual programming language) how that problem is to be solved, it's steps toward solving it, and the overall "process" it takes to get to a solution.
This is independent of the programming language used. If you can get to this point, the language used fades into the background - it's just another tool in the toolbox (of the many hundreds of languages that exist - each with strengths and weaknesses) - and instead you can focus on the problems and their solutions. If you are looking to use this knowledge to pursue a career, it is ultimately better to have the ability to pick up a language and code, rather than only understanding the "language-du-jour" and potentially becoming pigeonholed in your knowledge base.