// As in C#/Java if (obj != null) { obj.doSomething(); }
At least in javascript it's easier with the && operator:
str && str.doSomething();
In Obj-C you can just:
[str doSomething]; // If you really care if it happened or not, then introduce a check for nil
Once you get used to the idea that nil doesn't break your code, you start writing your methods accordingly.
For me, a lot of the stuff you write about (ARC, Blocks, literals) are the great improvements to the language.
Before ARC you had C/C++ like control of the memory and you could do some crazy stuff like an object holding on to itself and then committing suicide (pretty useful actually). With ARC you only have to care about retain cycles and declaring weak/strong pointers. It's an awesome feature for a non-GC environment.
Blocks are truly the biggest change in Obj-C and made the code much easier to develop. Any async task is now easy to deal with. Alongside GCD, multi-threading is made simple.
What I'm really trying to say is that from the first iPhone OS to iOS7, we've seen some major improvements to the language. If it continues at the same pace, you'll might like it more in your next year's review.