Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the empty @interface declaration in .m files used for?

I've started a new iOS 5 project and noticed something new at the top of each .m file

#import "HomeViewController.h"  @interface HomeViewController ()  @end  @implementation HomeViewController @synthesize ... 
  • Is this extra @interface ... required if I have a separate .h file?
  • Why did this not show up in pre iOS 5 projects?
  • Can I use this instead of having a separate .h file?
  • What is the best practice for this going forward?
like image 852
Toran Billups Avatar asked Mar 17 '12 15:03

Toran Billups


1 Answers

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.

like image 182
sch Avatar answered Oct 22 '22 10:10

sch