Objective-Cのプライベートメソッド

@privateが使えるのはメンバ変数(インスタンス変数)のみ

プライベートなインスタンス変数は次のように宣言する事ができます。

//MyClass.h
@interface MyClass : NSObject {
 @private
  id myInstanceVariable_;
}

// public methods
- (id)myInstanceVariable;
- (void)setMyInstanceVariable:(id)theVar;
@end

ですが、privateなメソッドを記述する場合、.hファイルではなく.mファイルへ以下のように記述をします。

//MyClass.m
@interface MyClass()
-(void) privateMethod;
@end

@implemention MyClass
// ここからヘッダーファイルに記述されている処理を実装する
// privateMethodの実装もここにできる
@end

つまり、プライベートメソッドに実装ファイル側の冒頭にinterface宣言と実装部をまとめて記述します。

Objective-C的にはこれはカテゴリーと呼ばれる機能です。

カテゴリーの補足説明

Perl寄りのHackerに向けて解説しておくと、
CPANモジュールにメソッド追加したい場合はそのモジュールを継承してからメソッドを追加する方法が一般的だと思います。

そんなときObjective-Cの場合は「親クラス+追加するメソッド名」をファイル名として既存クラスにメソッドを追加します。
以下、Twitter-OAuth-iPhoneで記述されている、NSStirngにURLEncodingの処理を追加したいのでカテゴリ機能を使って
機能を追加している例です。

// NSString+URLEncoding.h
#import <Foundation/Foundation.h>


@interface NSString (OAURLEncodingAdditions)

- (NSString *)URLEncodedString;
- (NSString *)URLDecodedString;

@end
@implementation NSString (OAURLEncodingAdditions)

- (NSString *)URLEncodedString 
{
    NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                           (CFStringRef)self,
                                                                           NULL,
																		   CFSTR("!*'();:@&=+$,/?%#[]"),
                                                                           kCFStringEncodingUTF8);
    [result autorelease];
	return result;
}

- (NSString*)URLDecodedString
{
	NSString *result = (NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault,
																						   (CFStringRef)self,
																						   CFSTR(""),
																						   kCFStringEncodingUTF8);
    [result autorelease];
	return result;	
}
@end

まとめ

Objective-Cではインスタンス変数をプライベート宣言する事はできるけど、メソッドをプライベートにする場合はカテゴリーをつかってね