如何在Objective-C中的Singleton类中实现“私有”方法

How to implement a “private” method in Singleton class in Objective-C

我在Objective-C中有一个singleton myclass,在singleton中,假设我有一个方法-(void)foo,其他类消息使用了[MyClass sharedManager] foo]

在foo中,我调用一个在myclass中实现的"private"方法-(void)bar。所以像这样:

1
2
3
-(void)foo {
     [self bar];
}

因为我希望BAR是私有的(在Objective-C中尽可能私有),所以我的myclass.h文件中没有BAR的定义。这会在xcode中引起警告:

Method '-bar' not found (return type defaults to 'id')

如何在我的单例类中使用私有方法?


你应该使用"类别"。如下所述:http://macdevelopertips.com/objective-c/private-methods.html

基本上,您只需声明实现文件中的方法。类别可以用于其他事物,但这是一种非常简单的使用它们的方法。

我将从该站点上的示例代码中更改的唯一一件事是,它们在实现文件的顶部具有此代码:

1
2
3
4
// =================================
// = Interface for hidden methods
// =================================
@interface SomeClass (hidden)

您应该将其更改为:

1
2
3
4
// =================================
// = Interface for hidden methods
// =================================
@interface SomeClass ()

这使得它成为一个"匿名类别"。您不需要命名它,因为您正在同一个文件中实现函数。

因此,如果要在类中声明私有方法-(void)栏,可以执行以下操作:

1
2
3
@interface MyClass ()
-(void)bar;
@end

然后你可以像正常一样实现这个功能