Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 伪私有方法的实现文件中的方法原型?_Iphone_Objective C_Ios_Xcode_Oop - Fatal编程技术网

Iphone 伪私有方法的实现文件中的方法原型?

Iphone 伪私有方法的实现文件中的方法原型?,iphone,objective-c,ios,xcode,oop,Iphone,Objective C,Ios,Xcode,Oop,我有一些方法没有在类的接口中声明,因为只有类中的代码才应该使用它们。但是,当方法想要调用在其下面实现的方法时,我的方法的安排会产生一些“…可能不响应选择器…”警告 有没有办法在我的实现文件中声明这些伪私有方法的原型,这样我就不会收到这些警告?您可以使用。我更喜欢它们而不是类别(为此目的),因为它们声明的方法必须在对应类的主@implementation块中实现 一个类通常有一个公开声明的API,然后有另外的方法私下声明,供该类或该类所在的框架单独使用。如上所述,您可以在私有头文件或实现文件中的类

我有一些方法没有在类的接口中声明,因为只有类中的代码才应该使用它们。但是,当方法想要调用在其下面实现的方法时,我的方法的安排会产生一些“…可能不响应选择器…”警告

有没有办法在我的实现文件中声明这些伪私有方法的原型,这样我就不会收到这些警告?

您可以使用。我更喜欢它们而不是类别(为此目的),因为它们声明的方法必须在对应类的主
@implementation
块中实现

一个类通常有一个公开声明的API,然后有另外的方法私下声明,供该类或该类所在的框架单独使用。如上所述,您可以在私有头文件或实现文件中的类别(或多个类别)中声明此类方法。这是可行的,但编译器无法验证所有声明的方法是否都已实现

类扩展允许您在主类
@interface
块之外的位置为类声明其他必需的方法

您可以这样声明一个类扩展:

@interface MyObject () // No name is given in the parentheses
你可以用一个。我更喜欢它们而不是类别(为此目的),因为它们声明的方法必须在对应类的主
@implementation
块中实现

一个类通常有一个公开声明的API,然后有另外的方法私下声明,供该类或该类所在的框架单独使用。如上所述,您可以在私有头文件或实现文件中的类别(或多个类别)中声明此类方法。这是可行的,但编译器无法验证所有声明的方法是否都已实现

类扩展允许您在主类
@interface
块之外的位置为类声明其他必需的方法

您可以这样声明一个类扩展:

@interface MyObject () // No name is given in the parentheses

objective-c中不存在私有方法。请看这篇文章


objective-c中不存在私有方法。请看这篇文章


只需使用一个类别-我在.m文件中执行类似操作:

@interface MyClass (PrivateMethods)
- (void)privateMethod1;
- (void)privateMethod2:(NSString *)aParam;
@end

@implementation MyClass
- (void)privateMethod1;
- (void)privateMethod2:(NSString *)aParam;
@end

只需使用一个类别-我在.m文件中执行类似操作:

@interface MyClass (PrivateMethods)
- (void)privateMethod1;
- (void)privateMethod2:(NSString *)aParam;
@end

@implementation MyClass
- (void)privateMethod1;
- (void)privateMethod2:(NSString *)aParam;
@end

我想不出你为什么要在类扩展上这样做。这是一样的,但在.m文件中定义了,因此只有在该文件中定义的其他方法才能看到。@Chuck-你可能是对的。我想我这样做主要是出于习惯,我从来没有发现有必要对扩展进行额外的编译器检查。我想不出任何理由你会对类扩展这样做。这是一样的,但定义在.m文件中,因此只有在该文件中定义的其他方法才能看到。@Chuck-你可能是正确的。我想我这样做主要是出于习惯,我从来没有发现有必要对扩展进行额外的编译器检查