2011-12-06 19 views
0

ObjCで参照渡しをしたいと思います。ここで は、シナリオの実例である:ObjCでの参照渡しの問題

// MainClass.h 
@interface MainClass 
{ 
    Board *board; 
    OtherClass *other; 
} 
@end 

// MainClass.m 
@implementation MainClass 

- (id)init 
{ 
    if (self = [super init]) 
    { 
     board = [[Board alloc] init]; 
     other = [[OtherClass alloc] initOtherClassWithBoard: board]; 
    } 
    return self 
} 

@end 

// Other class.h 
@interface OtherClass 
{ 
    Board *refBoard; 
} 
- (void)initOtherClassWithBoard: (Board*)ref; 
@end 

@implementation OtherClass 

- (id)initOtherClassWithBoard: (Board*)ref 
{ 
    if (self = [super init]) 
    { 
     refBoard = ref; 
    } 
    return self; 
} 

@end 

だから私の質問は、私のOtherClassがMainClassからリファレンスボードを保持しているんですか? またはOtherClassのボードはコピーですが、参考資料ではありません。 もし私が参照をしたいのであれば、私はどのようにそれを変更すべきですか?

編集:私は両方のクラス

@property (nonatomic, retain) Board *board; 

答えて

2

常には、ポインタ、a.k.a.参照を介してObjective-Cのオブジェクトを参照します。したがって、オブジェクトはであり、Objective-Cでは常にが渡されます。

2

にこれを追加した場合、それが参照何 。それはあなたがそれをコピーにする何かをしないかぎり(@property (copy)のように)、またはcopyメッセージを送信しない限り、コピーではありません。

+0

どうすればいいですか? @property(nonatomic、retain)? –

+0

@CadrickLoh - '@property(nonatomic、retain)'はオブジェクトのコピーを作成しません。 '非原子的な'はプロパティがどのようにアクセスされるか、Googleまたは検索StackOverflowと関連しています。 'retain'はオブジェクトの保持カウントを増加させます。 – RyanM