There are many reasons why you should use knives and why you should not. There is no final answer, and each answer depends on what you need to do.
In addition to the obvious advantages of Nibs (the quick process of creating a user interface, minimizing the build code in .m files), they offer something that you cannot find otherwise: problems with localization. By localizing your application in other languages, you come across phrases and things that take 2-3 words to explain, in another language they take only one. This seriously leads to errors with inappropriate views inside the view controller when using different localizations. That way, you can have 2-3 sub-nibs for each nib in Xcode 4 and localize each one the way you like, and place the buttons and views in the right places without worrying about moving your views depending on the language. user has. If you were to do all this with code, you would have to put it everywhere, and that is certainly bad programming practice and error prone.
I have created several view controllers that will require hundreds of lines to customize the views if I have not used the interface constructor.
However, NIBs never achieved the performance of creating views programmatically, since each NIB is a view descriptor written in HTML / XML, and before any view is created, the file must be read from disk and parsed. Nibs also lacks settings that a simple code has (shadows, round corners, and other Quartz magic). These settings are not available because there are many ways to achieve the same result using the code, either by talking to a higher level Core Animation level, or by directly accessing QuartCore and CGGraphics, and making there heavy material, which is certainly faster and recommended in most cases (shadows using layers can be extremely slow). Therefore, Apple does not want to limit the development of a particular way of drawing.
NIBs exist for some reason. You must make sure that in your application you understand the reasons why you create the NIB. There are knots for connecting code to outputs, facilitating localization, speeding up development and cleaning code. Inside the project, you should definitely use Nibs, but you should also avoid using them where simple code will also give you the same results with minimal or similar effort.
Last but not least, consider memory management. Using Nibs will affect the release of selected objects, such as IBOutlets. If you are sure that the IBOutlet you created will be released, if you want to, do not use the NIB. use simple code instead.