私はiOSアプリでいくつかのシミュレーション計算をしようとしましたが、私の電話は時間の経過とともにメモリ不足になり、メモリ使用量の追加を停止しません。これがどこで発生するかはわかっていますが(Instrumentsでそれを釘付けにしました)、私はまだ知りませんメモリリークを止めるために何を変更する必要があるのか わかりません。
ここにメモリ割り当てが行われる方法があります。ここに新しいデータを追加していることはわかっていますが、ARC は割り当てられたすべてのデータを解放すると思いましたが、これ以上参照できませんか?
int round = 0;
InstanceInSimulation *simulatingChosen = [[InstanceInSimulation alloc] initWithSimulationInstance:_chosenInstance];
InstanceInSimulation *simulatingOpponent = [[InstanceInSimulation alloc] initWithSimulationInstance:_opponentInstance];
while (round < _maxRounds) {
// first choose action
NSManagedObject *chosensAction = [simulatingChosen nextActionAgainstOpponent:simulatingOpponent];
NSManagedObject *opponentsAction = [simulatingOpponent nextActionAgainstOpponent:simulatingChosen];
// second calculate which action first
InstanceInSimulation *attackingFirst;
InstanceInSimulation *defendingFirst;
NSManagedObject *attackingFirstsAction;
NSManagedObject *defendingFirstsAction;
if (simulatingChosen.instance.speed > simulatingOpponent.instance.speed) {
attackingFirst = simulatingChosen;
defendingFirst = simulatingOpponent;
attackingFirstsAction = chosensAction;
defendingFirstsAction = opponentsAction;
} else {
attackingFirst = simulatingOpponent;
defendingFirst = simulatingChosen;
attackingFirstsAction = opponentsAction;
defendingFirstsAction = chosensAction;
}
// memory savings
chosensAction = nil;
opponentsAction = nil;
// third calculate
[self calculateSomething]; // this is not the memory problem
// memory savings
attackingFirst = nil;
attackingFirstsAction = nil;
defendingFirst = nil;
defendingFirstsAction = nil;
round++;
}
// memory savings
simulatingChosen = nil;
simulatingOpponent = nil;
__弱いことをする必要がありますか? 方法がわかりません、誰か助けてくれませんか?