みんな。私の「engrish」はあまり良くありませんが、私の問題を理解していただければ幸いです。
私がこのようなコードを持っているとしましょう
-(id) init
{
if ( self = [super init] )
{
deck = [[NSMutableArray alloc] initWithCapacity:52];
Card *newCard = [[Card alloc] init];
for ( int suit = 0; suit < 4; suit++ )
for ( int rank = 0; rank < 13; rank++ )
{
newCard.suit = suit;
newCard.rank = rank;
[deck addObject:newCard];
}
[newCard release];
}
return self;
}
前述のコードに間違いがあるように感じます。ネストされたループに52の異なるオブジェクトを作成し、すべてのオブジェクトを配列に追加したいと思います。しかし、私は52個の同じオブジェクトを持ち、配列には同じアドレスを指す52個のポインターがあると思いますよね?
このようにするとどうなりますか。
-(id) init
{
if ( self = [super init] )
{
deck = [[NSMutableArray alloc] initWithCapacity:52];
for ( int suit = 0; suit < 4; suit++ )
for ( int rank = 0; rank < 13; rank++ )
{
Card *newCard = [[Card alloc] init]; // I guess every time newCard
newCard.suit = suit; // created, it will point to
newCard.rank = rank; // another chunk of memory,
[deck addObject:newCard]; // right?
[newCard release] // Should I release newCard every time?
}
}
return self;
}
では、どの方法で52種類のカードを作成できますか?ありがとうございました。さらに説明が必要な場合は、私に聞いてください。