我创建了一个游戏模型作为一个类。我查看了有关创建类扩展的问题:Best way to define private methods for a class in Objective-C
我所拥有的是一些公共方法 - 这些方法可供其他VC在应用中使用。 我还想要一些私有方法,类公共方法可以使用,但不需要对应用程序的其余部分开放。
我认为这可以通过类扩展来完成,在实现文件中添加一个额外的接口部分,但这似乎不起作用。
Imp文件:
#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 ...]的能力。
答案 0 :(得分:1)
您的createNewGameAgainst
方法是一种类方法(请参阅方法声明前面的+
)。您的checkIfGameAlreadyExistsAgainst
方法是一种实例方法(请参阅方法声明前面的-
)。要从checkIfGameAlreadyExistsAgainst
致电createNewGameAgainst
,您需要获得MESGameModel
的实例。 self
内的createNewGameAgainst
引用了类本身,而不是它的实例。
答案 1 :(得分:1)
您可以使用表格;你的问题是理解类方法与实例方法的区别。
+ (void)createNewGameAgainst:(PFUser *)user2 withCompletion:(void (^)(BOOL success))completionHandler
是一个类方法(注意'+') - 您不需要MESGameModel
的实例来调用此方法。但是,在该类方法的定义(或主体)中,您将没有MESGameModel
的实例。您不能使用MESGameModel
的实例方法,属性或ivars,因为类方法中不存在MESGameModel
的实例。
self
将是一个特殊的类,您可以发送消息但响应类方法。
- (BOOL)checkIfGameAlreadyExistsAgainst:(PFUser *)opponentUser;
声明一个实例方法(注意' - ')。 MESGameModel
的实例可以响应此消息,并且在该方法的定义中,您将可以访问MESGameModel
的实例变量,属性,实例方法和类方法。
self
将是MESGameModel
的一个实例,您可以发送消息,并响应实例方法。