0

以下の行が Instruments 内でメモリ リークを起こしていると表示されている理由を誰かが説明してくれるかどうか疑問に思っていました。

self.videoEngine = [[VideoEngine alloc] initWithCallbackName:@"IntroFinished"];

self.videoEngine = [[VideoEngine alloc] initWithCallbackName:@"MainMovieFinished"];

self.timerMap = [NSTimer scheduledTimerWithTimeInterval:fps target:self selector:@selector(updateAnimationTimer) userInfo:nil repeats:YES];

NSString *locationName2 = [[NSString alloc] initWithString:[locationName substringFromIndex:test]];

初期化時に事前設定された NSString を使用しないことに問題はありますか? self.videoEngine と self.timerMap の例では、どちらも (非アトミック、保持) プロパティを持ち、使用前に合成されます。

4

1 に答える 1

3

Arcを使用していない場合(retainが言及されているため、そうではないと思います)、それはメモリリークになります。

VideoEngine プロパティを割り当てると、オブジェクトに対して別の保持が行われます。alloc ステートメントの最後に autorelease を追加する必要があります。

self.videoEngine = [[[VideoEngine alloc] initWithCallbackName:@"IntroFinished"] autorelease];

self.videoEngine = [[[VideoEngine alloc] initWithCallbackName:@"MainMovieFinished"] autorelease];

self.timerMap = [NSTimer scheduledTimerWithTimeInterval:fps target:self selector:@selector(updateAnimationTimer) userInfo:nil repeats:YES];

NSString *locationName2 = [[NSString alloc] initWithString:[locationName substringFromIndex:test]];
于 2012-07-19T09:50:07.197 に答える