次の 2 つのシナリオについて教えてください。これらはほとんど似ていますが、小さいオブジェクトと大きいオブジェクトが含まれています。
シナリオ 1:
次のコードでは:
NSString *iAmAstring;
for(int i = 0; i < 100000;i++)
{
NSLog(@"INT VALUE: %d", i);
iAmAstring = [NSString stringWithFormat:@"%d", i];
NSLog(@"STRING VALUE: %@", iAmAstring);
}
ARCをオンにして以来、上記の大規模なループを実行しても意味がなく、ループ実行ごとに文字列ポインターを割り当てて初期化していると言われました。小さすぎて問題にならないと言われたので、ARCはそれを処理できます. しかし、より大きなオブジェクトでそれを行うべきではありません。私はもともとC#のバックグラウンドから来ており、ループの最後で文字列をnullに設定することに慣れていますが、ここではループの最後で文字列を解放できないため、ARCが文句を言い、設定するとnil
ループの最後で、ARC の作業をさらに作成することになりますが、実際には正しいことを行っておらず、ゾンビ コードを作成しています。ループの最後にARCをオンにして、メモリサイズが小さい大規模なループ(できれば私が使用した文字列)で初期化して、割り当てているオブジェクトに何をするかを明確にすることはできますか?
シナリオ 2:
上記と同じですが、上記で使用されている NSSTRING がサイズの大きい別のオブジェクトになったとします。ここでは明らかにループの前に割り当てて初期化し、それを設定してループで使用しますが、ループの最後で再び何かをして少し解放するので、もう一度ARCをオンにしますか?
前もって感謝します。