1

UIDeviceRGBColor からのリークがあります。担当フレームは +[UIColor allocWithZone:] です。私はARCを使用していません。

リークは以下の方法から来ています。

- (void) lAction
{
MKCoordinateRegion mapRegion;
mapRegion.center = mapView.userLocation.coordinate;
mapRegion.span.latitudeDelta = 0.05;
mapRegion.span.longitudeDelta = 0.05;

[mapView setRegion:mapRegion animated: YES];

SettingsViewController *settingsViewController = [[SettingsViewController alloc] 
initWithNibName:@"SettingsViewController" bundle:nil];

リークは次の行から発生しています。

[self presentModalViewController: settingsViewController animated:YES];

次に、メソッドは次のように終了します。

self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:40.0/255.0 
green:43.0/255.0 blue:46.0/255.0 alpha:1.0];
}

誰でもこれを修正する方法を知っていますか? 皆さん、ありがとうございました!

4

1 に答える 1

-1

試す:

SettingsViewController *settingsViewController = [[[SettingsViewController alloc] 
initWithNibName:@"SettingsViewController" bundle:nil] autorelease];

コメンターを満足させるために、ARCを使用していない場合、 を呼び出すたびallocに、返されたオブジェクトの保持カウントが1に設定されるという簡単な説明があります。それを解放する責任はあなたにあります。これを行う簡単な方法の 1 つは、autorelease を呼び出すことです。これにより、メインの実行ループの最後に自動的に解放されます (独自の自動解放プールを管理している場合を除きますが、それについては説明しません)。オブジェクトを使用する必要がある限り、コードにそれを保持するものがあることを確認する必要があります。この場合、呼び出すときに

[self presentModalViewController: settingsViewController animated:YES];

settingViewController で追加の保持が呼び出されるため、メソッドが終了したときに割り当てが解除されることを心配する必要はありません。

Objective-C でのメモリ管理は非常に簡単だと思いますが、追加のコードが必要であり、最近では誰もが ARC を使用しています。既存のコード ベースにわずかな変更を加えるだけの場合は、ARC に切り替える必要はありませんが、しばらくの間コード ベースで作業を続ける場合は、切り替えた方が時間効率が高くなります。 . Xcode がほとんどの作業を行うので、非常に簡単です。(ここを参照してください: http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html )。

于 2013-02-17T04:46:59.930 に答える