如何在iOS> = 4.0中的Objective-C中创建私有方法和ivars?

Pro*_*ber 1 objective-c ios

我听说最近可以通过在.m文件中再次声明接口来创建私有方法.但究竟是什么语法呢?

如果重要:在ARC下.

  • 必须在@implementation之前出现吗?
  • 它看起来与.h文件中的@interface声明完全一样吗?
  • 它必须复制有关继承和协议合规性的信息吗?
  • 从什么时候开始?什么是支持它的最古老的iOS和Objc-C运行时?

Reg*_*ent 10

头文件:

//YourClass.h:
@interface YourClass {
    @private //optional
    //private scope ivars
    @protected //default, optional
    //protected scope ivars
    @public //optional
    //public scope ivars
    @package //optional
    //package scope ivars
}

    //public methods

@end
Run Code Online (Sandbox Code Playgroud)

实施文件:

//YourClass.m:
#import "YourClass.h"

//you could also import this class extension (that's what it's called) from an
//external header file which can be helpful for making pseudo-protected methods/ivars
//Don't forget the additional import statement then, though.
@interface YourClass () <PrivateProtocol> //protocol tag optional, of cource

    @private //optional
    //private scope hidden ivars
    @protected //default, optional
    //protected scope hidden ivars
    @public //optional
    //public scope hidden ivars
    @package //optional
    //package scope hidden ivars

@end

@implementation YourClass

//your class' method implementations

@end
Run Code Online (Sandbox Code Playgroud)

有关ivar范围的文档.

有关上述代码段中的新内容以及它的全部内容(兼容性等)的更多信息,请参阅WWDC 2011 Session#322

Xcode 4.2带来了隐藏的私人ivars.类扩展已经存在了很长一段时间.