What does @class do in Objective-C?

前端 未结 4 2007
清酒与你
清酒与你 2020-12-12 16:06

Can anyone please explain me what does @class declaration do in Objective-C and what are the cases in which we should use this declaration?

相关标签:
4条回答
  • 2020-12-12 16:42

    hope this will help little more

    Above answer already state almost every thing , i would like to add some thing on it.

    The @class Foo is a forward declaration of the Foo class. It’s like telling the compiler, foo class exists So don't bother about it right now.

    Note:- Class declaration becomes very critical when both class need each other. if we do usual #import statement then, we would have an endless loop of imports and Compilers don’t like endless loops. So we use @class Classname.

    0 讨论(0)
  • 2020-12-12 16:54

    It’s a forward declaration. It essentially tells the compiler that there’s a class of that name. I use it in the interface declarations:

    @class Foo;
    @interface Bar : NSObject {
        Foo *someFoo;
    }
    @end
    

    Of course you could import the header for Foo instead:

    #import "Foo.h"
    @interface Bar : NSObject {
        Foo *someFoo;
    }
    @end
    

    But if someFoo is not exposed to users of Bar, they would import an extra header file that’s of no use to them. With the @class declaration the users of Bar see no extra import, because Foo.h will be imported in the implementation file of Bar.

    0 讨论(0)
  • 2020-12-12 16:54

    @class is used for creating forward declaration of any class. If you're creating any class that's implementation is unknown to you then you can do this using @class compiler directive.

    You can implement this class when the implementation is known to you.

    0 讨论(0)
  • 2020-12-12 16:59

    it is called a forward declaration.

    you use this directive to tell the compiler that there is an objc class with the name specified. your other options are to include the interface, or use id for variables or types.

    this is helpful to minimize dependencies. i use them whenever i can to minimize dependencies, and significantly reduce build times.

    it's the same as in c and c++:

    struct mon_struct;
    namespace MON { class mon_class; }
    
    0 讨论(0)
提交回复
热议问题