为Class的私有方法创建类扩展

时间:2013-07-04 22:09:47

标签: ios objective-c ios5 methods class-extensions

我创建了一个游戏模型作为一个类。我查看了有关创建类扩展的问题: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 ...]的能力。

2 个答案:

答案 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的一个实例,您可以发送消息,并响应实例方法。