2011-07-08 6 views
8

、.mファイルに、プライベートメソッドを作成するためのハック方法の一種があります:は、Objective-Cで

@interface FooClass (PrivateMethods) 
- (void) doBar:(id)barAction withBaz:(id)bazAction; 
@end 

これは方法のための素晴らしい作品。私は、プロパティと同じことを実行しようとしました:

@interface BarClass (PrivateMethods) 
@property (nonatomic, strong) BazObject *myBaz; 
@end 

@implementation BarClass 
@synthesize myBaz = _myBaz; 
[...] 
@end 

この

は、コンパイルの警告をもたらします。プロパティは、クラスの実装に実装することができない「PrivateMethods」のカテゴリに宣言しました。その後

@implementation BarClass (PrivateMethods) 
@synthesize myBaz = _myBaz; 
@end 

:私はカテゴリに私の財産を移動しようとした@synthesize is not allowed in a category's implementation.

明白な答えである「ちょうどアイバーズを使用し、しようと終了」が、私は、彼らは「は、アップルの人々によって言われてきました(個人的に)完全にプロパティを使用して移動しました。彼らが持っている安全性(銃の安全性のように、足で自分を撃つのが難しい)は私をすべて幸せにしてくれます。裸のイヴァールに頼らずにこれを行う方法はありますか?

答えて

16

利用代わりにカテゴリ(カッコ内のカテゴリ名が存在しないことに注意)のclass extension

@interface BarClass() 
@property (nonatomic, strong) BazObject *myBaz; 
@end 

@implementation BarClass 
@synthesize myBaz = _myBaz; 
[...] 
@end 

あなたはこの質問(と回答)を読みたいかもしれないだけでなく:Does a private @property create an @private instance variable?

4

これは私がやったことで、それは私のために働く。変更はもはやカテゴリを作成していないことです。むしろ、クラス自体の拡張を作成しています。

@interface BarClass() 
@property (nonatomic, retain) BazObject *myBaz; 
@end 

@implementation BarClass 
@synthesize myBaz = _myBaz; 
[...] 
@end 
関連する問題