I like how thin the Objective-C layer is above C. All of the language constructs are accessible through pure C method calls, which provide a lot of insight into how the system works.
Any time I sit and think about how something is done in Objective-C, it doesn't take long to work out how I'd implement it and C and most of the time I can be pretty close (or quickly find), how various bits of "magic" are accomplished.
I don't like the overloaded dot operator added in 2.0, and have yet to hear a good reason for its inclusion (attracting developers used to using dots is not a good reason, imho; reducing the number of nested braces is better, but still unnecessary). I could do without garbage collection. Reference counting really isn't that hard.
The other features (namely properties and fast enumeration) are nice additions to the language.
(edit: multiple ideas, one poorly written sentence)
I think dot notation was a mistake -- it creates ambiguity between what is an object and what is a struct. There's no way to know without the aid of the documentation or the compiler.
Reference counting isn't that hard, but garbage collection is superior. I used to fall into the same camp as you, but prolonged experience to Objective-J and then going back to Objective-C, I realized that even though I knew how to solve the problems, they weren't worth wasting cycles in my thought processes. All that to say, reference counting works really well, but there's no good argument not to just use garbage collection (at least 99% of the time).
Yeah. One of the advantages of Objective-C over C++, IMO, is that it's clear which syntax is foreign to C and which is the extension. For example, Object-C strings are prefixed with @, so you see stuff like Log(@"Some message").
It looks weird to a C programmer, but it reduces ambiguity once you move up the learning curve.
This is more of a question than a comment, but isn't it the case that sometimes garbage collection will succeed where reference counting will fail?
I've used a kind of reference-counted pointer in C++, but it'll fail if the reference graph isn't basically a DAG, (e.g. if you have some kind of circular reference). Do garbage collectors catch this when reference counting won't?
That dot operator took me forever to understand , its highly unintuitive. @synthesize should of just created the setMethod and getMethod that would make sense. Not some weird property light. I'm also a big fan of the parameter descriptions, it makes it really easy to read.
Any time I sit and think about how something is done in Objective-C, it doesn't take long to work out how I'd implement it and C and most of the time I can be pretty close (or quickly find), how various bits of "magic" are accomplished.
I don't like the overloaded dot operator added in 2.0, and have yet to hear a good reason for its inclusion (attracting developers used to using dots is not a good reason, imho; reducing the number of nested braces is better, but still unnecessary). I could do without garbage collection. Reference counting really isn't that hard.
The other features (namely properties and fast enumeration) are nice additions to the language.
(edit: multiple ideas, one poorly written sentence)