I'd like to see more of this type of thing. When learning a new language, I don't need an introduction to the if statement or while loops, yet in the interests of completeness many programming books include a thorough (and mind-numbing) guide to them. For some readers that's called for, but many of us are stuck reading about concepts we're already comfortable with. I'm concerned that if I don't read everything, I'll miss out of some bizarre quirk of the language, so I'm reluctant to skim, but this gets in the way of what I'm really trying to achieve - using the language to make cool stuff.
Writers of programming language books take note: I'm generally not interested in the tool. Tools are boring. No really, they are. Making cool stuff and solving hard problems is interesting and fun. Get the tool out of the way so I can get things done.
Agreed. I wrote a couple-page cheat sheet on Objective C, and since I've made a twice-yearly ritual out of forgetting Objective C, it's come in handy. Repeatedly.
If you ever have time or inclination to share it, I could use a good cheat sheet. The closest I have now is "Objective C for C++ programmers", but it's not short enough to be a useful cheat sheet.
Yes. Which is why I think it would be best to view the iPhone platform in a similar light as a game console. Cool and fun, but not something you would seriously be expecting to be the basis of the next wave of personal computing.
That would truly be a sad future, worse than the '1984' scenario being played out by Amazon's DRM. What free person would want to rely on a device that required the manufacturers constant consent to allow it to function as that they wanted? Thankfully this seems unlikely. History suggests that there is a significant benefit in choice and freedom and that consumers will eventually follow that path.
> It's easier for the user, the development community is willing and it offers larger returns for the platform creator.
So the lock-in is powerful and effective?
> Besides, most of the guts of personal computing are being done via protocols and services; platform lock-in isn't really done on the device anymore.
So the lock-in doesn't really matter?
Which is it? You can't have it both ways. The answer is that the lock-in acts like friction, wasting value instead of providing returns for participants in the system.
The important thing is not the lock-in, and probably not even the pre-screening of applications. The important thing is the streamlining of getting software and updates to the user.
If centralized software distribution scares you, be afraid of Ubuntu.
With the iPhone there is one software repository. With Ubuntu (and most major distributions) you can roll your own repository (or someone selling software can).
Centralized software distribution is awesome, the issue with the iPhone model is that you have to be anointed.
All losses of freedom are important. Ubuntu doesn't force you to use them for software distribution or updates.
Of course Apple could do the same without any loss of experience for those who wanted to stay within their cage. The only possible 'benefit' in enforcing these restrictions is the prevention of pirating of software. But DRM hasn't worked for music and there isn't much reason to think it will work for software either.
"The equivalent to Java’s this is pretty much self."
Well no, the difference (inside a class) of:
this.foo = myshinyobject
and
foo = myshinyobject
is nothing in Java. In Objective-C,
self.foo = myshinyobject
and
foo = myshinyobject
are different. Particularly with regards to the @property (retain) magic; if you forget self.foo and use foo, then myshinyobject might get garbage collected. Which is not what you'd expect with a retained property.
Well, on iPhone, it would get deallocated with the next pool drain, not garbage collected (since garbage collection does not exist for iPhone as of now.)
foo = myshinyobject is ok if you use instantiate it like [[SomeClassThing alloc] initetc] rather than one of the convenience methods like [SomeClassThing thing] since those are supposed to be returned with a retain count of 0.
If you do an alloc/init, then you need to release it (or you leak). If you're assigning to self.foo, then you can just release the thing you created after assigning it. If you assigned it to foo, and then release it, then you're in the position I mentioned above.
Writers of programming language books take note: I'm generally not interested in the tool. Tools are boring. No really, they are. Making cool stuff and solving hard problems is interesting and fun. Get the tool out of the way so I can get things done.