是否可以在Objective-C中将方法声明为私有?

Tom*_*mmy 20 objective-c

是否可以在Objective-C中将方法声明为私有?

Bar*_*ark 34

如果您正在使用Objective-C 2.0,那么创建其他人"难以"调用的方法的最佳方法是将它们放在类扩展中.假设你有

@interface MyClass : NSObject {

}

- (id)aPublicMethod;

@end
Run Code Online (Sandbox Code Playgroud)

MyClass.h文件中,您可以添加到MyClass.m以下内容:

@interface MyClass () //note the empty category name
- (id)aPrivateMethod;
@end

@implementation MyClass
- (id)aPublicMethod {...}
- (id)aPrivateMethod {...} //extension method implemented in class implementation block
@end
Run Code Online (Sandbox Code Playgroud)

类扩展的优点是"扩展"方法在原始类体中实现.因此,您不必担心@implementation方法实现所在的块,如果扩展方法未在类中实现,编译器将发出警告@implementation.

正如其他人所指出的那样,Objective-C运行时不会强制你的方法的私有性(即使没有源代码,也不难发现那些方法正在使用类转储),但编译器会生成警告如果有人试图打电话给他们.一般来说,ObjC社区采取"我告诉你不要调用这种方法[通过将它放在私有类扩展或类别中或仅通过记录该方法是私有的 ]并且你仍然调用它.无论发生什么混乱都是你的错不要傻." 对这个问题的态度.


Chu*_*uck 3

不,任何对象都可以向任何其他对象发送任何消息。但是,您可以将该方法放入属于类实现文件一部分的类别中。这样,如果您尝试在其他地方调用它,您将收到“类可能无法实现此方法”警告。这是使方法成为“私有”的正常方法。