0

我已经创建了一个游戏模型作为一个类。我检查了这个关于创建类扩展的问题:Best way to define private methods for a class in Objective-C

我拥有的是一些公共方法——这些方法可供其他 VC 在应用程序中使用。我还想要一些私有方法,类公共方法可以使用,但不需要像这样对应用程序的其余部分开放。

我认为这可以通过类扩展来完成,在实现文件中添加一个额外的接口部分,但这似乎不起作用。

小鬼文件:

#import "MESGameModel.h"

@interface MESGameModel ()

-(BOOL)checkIfGameAlreadyExistsAgainst:(PFUser *)opponentUser;

@end

@implementation MESGameModel

#pragma mark - Public methods
+(void)createNewGameAgainst:(PFUser *)user2 withCompletion:(void (^)(BOOL success))completionHandler{

稍后我有另一个私有方法的声明:

#pragma mark - Private methods
-(BOOL)checkIfGameAlreadyExistsAgainst:(PFUser *)opponentUser {

我正在寻找的是在公共方法(createNewGameAgainst)中调用例如 [self checkIfGameAlreadyExistsAgainst...] 的能力。

4

2 回答 2

1

你的createNewGameAgainst方法是一个类方法(见+前面的方法声明)。你的checkIfGameAlreadyExistsAgainst方法是一个实例方法(见-前面的方法声明)。要从您那里调用checkIfGameAlreadyExistsAgainstcreateNewGameAgainst您需要获取MESGameModel. self内部createNewGameAgainst引用类本身,而不是它的实例。

于 2013-07-04T22:14:45.297 回答
1

您可以使用表格;您的问题是了解类方法与实例方法的区别。

+ (void)createNewGameAgainst:(PFUser *)user2 withCompletion:(void (^)(BOOL success))completionHandler

是一个类方法(注意'+')——你不需要一个实例MESGameModel来调用这个方法。MESGameModel但是,您将在该类方法的定义(或主体)中没有实例。您不能使用 的实例方法、属性或 ivars,MESGameModel因为MESGameModel类方法中不存在 的实例。

self在这个范围内将是一个特殊的类,您可以发送消息但响应类方法。

- (BOOL)checkIfGameAlreadyExistsAgainst:(PFUser *)opponentUser;

声明一个实例方法(注意'-')。的实例MESGameModel可能会响应此消息,并且在该方法的定义中,您将可以访问 的实例变量、属性、实例方法和类方法MESGameModel

self将是MESGameModel您可以发送消息的实例,并响应实例方法。

于 2013-07-04T22:18:38.233 回答