do I need to change the way I think about programming, do I need to approach the platform and language in a substantially different way.
Not substantially different, but different. The key thing to remember with Objective-C is that its model is much more in the spirit of Smalltalk's message passing paradigm than any of the C++-alike languages like Java and C#. You do not call methods of an object, you send messages to an object and it is the object that decides what code to run at run time. So you can actually send any message to any object (although the object might choose to throw an unrecognised selector exception) and you can change the behaviour of objects at run time.
Also, inheritance is used much less in Objective-C than other OO languages and you'll need to get very familiar with the delegate pattern (not to be confused with C# delegates).
You'll be surprised at the range of different collection classes i.e. it's very small. There's an array, a dictionary (map) and a set and mutable versions of each plus a few other relatively uncommon variants of these. There aren't a bazillion versions of each collection, one for each possible underlying implementation as in Java. The philosophy is "here's an API, let the runtime designers worry about the implementation".
Oh, and try to avoid using exceptions.