That's a class extension. You can use it to make declarations that you don't want to be in the .h
file.
This was used by many developers, even before, who manually added the extension in the .m
file. So I guess Apple included this in the template because it is widely used and is considered a good practice.
In fact, the .h
file should only be used to make declarations that are going to be used from other files. You may have to declare some properties, methods or constants that will only be used inside the .m
file. For those declarations, it is better to make them in the class extension.
So to answer your questions:
- Is this extra @interface ... required if I have a separate .h file?
No, it is not required but is a best practice.
- Why did this not show up in pre iOS 5 projects?
Even if this was a commonly used practice, it was not included in the template.
- Can I use this instead of having a separate .h file?
No. The class extension doesn't replace the .h
file where you have to declare the "public" interface of your class.
- What is the best practice for this going forward?
You should put in the class extension all the declarations that don't need to be visible outside of the .m
file.