私はIPhoneプログラミングを初めて勉強しています。次のメモリリークの解決には苦労します。私は、配列がリリースされるまで、それは割り当て解除されないので、配列にオブジェクトを追加すると、あなたが追加したオブジェクトを解放しても安全だろう、いずれかによって、参照カウントを増加させるという印象の下にあった解決できないメモリリークIPhone
while(numDeckCounter < numDecks){
int cardCounter=1;
for (int i =1; i<=52; i++) {
tempCard = [Card new]; //leaks tool says that this is leaking object
if(i>=1 && i<=13)
{
tempCard.suit = CLUBS;
tempCard.faceValue = cardCounter;
[deckArr addObject:tempCard]; //reference count 2
cardCounter++;
}
else if(i>=14 && i<=26)
{
tempCard.suit = DIAMONDS;
tempCard.faceValue = cardCounter;
[deckArr addObject:tempCard];
cardCounter++;
}
else if(i>=27 && i<=39)
{
tempCard.suit = HEARTS;
tempCard.faceValue = cardCounter;
[deckArr addObject:tempCard];
cardCounter++;
}
else
{
tempCard.suit = SPADES;
tempCard.faceValue = cardCounter;
[deckArr addObject:tempCard];
cardCounter++;
}
if(cardCounter ==14){
cardCounter=1;
}
[tempCard release]; //this causes an EXC_BAD_ACCESS -reference count should be 1
}
numDeckCounter++;
}
突き合わせると、配列内の各オブジェクトが解放されます。これは、オブジェクトの最終的な割り当てを解除するときです。
[tempCard release]を追加すると、私はそれがすでに割り当て解除されているので、メモリ位置にアクセスすることができないので、私のアプリをクラッシュさせます。
私が読んだことのすべてから、上記のことが真実だと思います。私が間違っていると誰かが私を修正してください。ありがとう。
どのようにテンポラリカードが宣言されていますか?同じ行に宣言してみませんか? 'Card * tempCard = [[カード割り当て] init];'。 – Joe
ARCを使用していますか? – larsacus
もし彼がARCを使っていたら、 '-release'の使用について不平を言わなければなりません。 – Wevah