• 締切済み

ObjectiveCでメソッドを呼び出すとメモリが消費されてしまいます

こんにちは CocoaでObjectiveCを使ってプログラミング中です。Xcode2.4.1を使っています。 長いNSStringの文字列(1000万字ぐらい)から一文字ずつ取り出して処理したいのですが、 substringWithRangeを用いて取り出そうとすると大量にメモリを消費してしまうのがアクティビティモニタで確認されます。 確認のため、以下のコードを作製してみました。やはりsubstringWithRangeの呼び出しでメモリが使用されるようです。 1000万回の呼び出しで200MBぐらいが使われるようですので、一回あたり20B程度の様子です。 イベントループを抜けてもアクティビティモニタ上、メモリの使用量は減りません。 なぜこのようになるのでしょうか? substringWithRangeはNSStringクラスに本来備わっているメソッドですが、 このメソッド内で使われたメモリが解放されないということでしょうか? この現象を防ぐ方法はありますか? なお、subStringToIndexでも同様のことが起きましたが、rangeOfStringでは起きませんでした。 NSString *string = @"ABC"; NSRange R = NSMakeRange(0,1); int i; for (i=0;i<10000000;i++){ [string substringWithRange:R]; };

みんなの回答

回答No.1

積もり積もって200MBにまで達する様ですと、メモリリークかも知れませんね. http://www.google.co.jp/search?q=nsstring+%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%AF メモリリークなのであれば、「何故」と訊かれましても、バグですので、理由なんて無いでしょうね.

関連するQ&A