如何在Objective-c中将类中的单个方法设置为private?
答案 0 :(得分:3)
Objective-C中没有私有方法的概念。但是,您可以做的是忽略头文件中的方法并在私有文件中添加类别。
通常情况如下:
@interface MyObject : NSObject {
// ivars
}
// public methods
@end
// usually in a seperate file
@interface MyObject ()
// private methods
@end
类别的空名称意味着它是class extension,这告诉编译器主要实现块中需要该方法。
答案 1 :(得分:1)
你不能严格地说在Objective-C中创建私有方法;但您可以在包含实现(MyClass.m
)的文件中创建一个类别,将其隐藏在头文件(MyClass.h
)中。
//MyClass.h
#import <Foundation/Foundation.h>
@interface MyClass : NSObject {
}
@end
实施档案:
//MyClass.m
@interface MyClass ()
- (void)myPrivateMethod;
@end
@implementation MyClass
- (void)myPrivateMethod {
return;
}
@end
答案 2 :(得分:1)
Objective-C本身并不支持设计的私有方法。
但是,您可以使用“类扩展”(匿名类别)来实现私有方法控制。
基本思想是在您的类(不是其标题)的实现文件中使用私有方法声明类扩展,但在@implementation块之外。然后,您可以实现这些方法,并且没有外部类可以看到它们。像这样:
@interface MyClass ()
- (void)myPrivateMethod;
@end
@implementation MyClass
- (void)myPrivateMethod
{
//implementation goes here
}
-(void)someOtherMethod
{
[self myPrivateMethod];
}
@end
使用类扩展会强制您实现主@implementation块中的方法,并要求它们被实现(就像它们在标头的主@interface块中声明一样)。
不幸的是,由于Objective-C的动态特性,这实际上不会阻止其他类调用这些方法。他们会收到警告,告诉他们该类可能不会响应该消息,但在运行时它会起作用。这给你的唯一能力是隐藏其他程序员的方法。
答案 3 :(得分:0)
你做不到。只有实例变量可以标记为私有。
虽然有办法做一些与私人方法相当的东西。 一般的想法是,您不要在标头中声明私有方法,而是在实现文件中声明。
因此,如果您想要一个public(myPublicMethod)和private(myPrivateMethod)方法,那么您的标题可能如下所示:
@interface MyClass {
}
- (void)myPublicMethod;
@end
然后,您的实施文件有三个选项:
<强> 1 强>
不要在任何@interface部分声明该方法,只要确保它在@implementation部分使用之前已经实现。
@implementation MyClass
- (void)myPrivateMethod { }
- (void)myPublicMethod {
[self myPrivateMethod];
}
@end
<强> 2 强>
在实现文件中使用匿名类别来声明私有方法并在主@implementation块中实现它们。
@interface MyClass ()
- (void)myPrivateMethod;
@end
@implementation MyClass
- (void)myPrivateMethod { }
- (void)myPublicMethod {
[self myPrivateMethod];
}
@end
第3 强>
在实现文件中使用常规类别,并在单独的@implementation块中实现私有方法。
@interface MyClass (PrivateMethods)
- (void)myPrivateMethod;
@end
@implementation MyClass (PrivateMethods)
- (void)myPrivateMethod { }
@end
@implementation MyClass
- (void)myPublicMethod {
[self myPrivateMethod];
}
@end