Private classes in Objective C

后端 未结 2 885
长情又很酷
长情又很酷 2021-02-01 14:50

I would like a pattern for a nested private class in Objective C.

Requirements are:

  • class will not be visible/accessible to other classes.
2条回答
  •  生来不讨喜
    2021-02-01 15:16

    Objective-C has no notion of private classes or private instance variables in a formal declarative fashion.

    Instead, visibility in Objective-C is entirely controlled by where you declare something. If it is in a header file, it can be imported by something else. If it is declared in an implementation file, it cannot (reasonably) be imported and, therefore, is effectively private to that compilation unit.

    And by "it", I mean pretty much anything that can be declared; class, global, etc...

    I.e. if you stick an @interface/@implementation pair for a class in a .m file, that class is effectively private to that compilation unit. Of course, without namespaces, make sure that class is uniquely named.


    Consider this:

    Foo.h:

    @interface Foo: NSObject
    ... public interface
    @end
    

    Foo.m:

    @interface __FooSupportClass: NSObject
    ... interface here ...
    @end
    
    @implementation __FooSupportClass
    @end
    
    @interface Foo()
    @property(retain) __FooSupportClass *__fooSupport;
    @end
    
    @implementation Foo
    @synthesize __fooSupport = fooSupport__;
    ... etc ...
    @end
    

    That gives you a private-by-visibility support class only available in your implementation with an instance variable and setter/getter methods on your class that are not visible outside the compilation unit either.

    (Note that Objective-C has "instance variables", not "member variables". They are similar, but you'll be better off using the vocabulary of the language.)

提交回复
热议问题