IB is awful. Take the following scenario:
Say you want to make a view,
MyView
. You makeMyView.h
,MyView.m
, andMyView.xib
.You add a button to the view with an outlet and an action and implement that in your class.
Now, say you want to use MyView in another class without the button. You add it, launch, and it crashes. You didn't add the outlet, so you get a KVO error. Crap. You add useless code so it will launch. Ugh.
Now, you add some new functionality at the last minute to your awesome
MyView
to do other stuff. Launch and test it in your second spot. All is good. A few days, later you get a rejection email from Apple. Wha?! Oh, you didn't test you updated my view in the first spot, which is now crashing because you renamed something or added a new outlet.
IB is awful. The compiler can't do sane checking of your code and you're opening yourself up to tons of problems that you can only find at runtime, which is awful.