【问题标题】:iOS memory issue with init in viewDidLoad and release in viewDidUnloadiOS 内存问题与 viewDidLoad 中的 init 和 viewDidUnload 中的释放
【发布时间】:2011-11-21 23:53:40
【问题描述】:

以下代码是否存在任何潜在的内存问题?:

- (void)viewDidLoad
{ 
    locationManager = [[CLLocationManager alloc] init];
}

- (void)viewWillAppear:(BOOL)animated {

    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    [locationManager startUpdatingLocation];
}

- (void)viewDidUnload
{
    [locationManager release];
    locationManager=nil;
    [super viewDidUnload];
}

我用 Instrument 查过了,上面的代码说有内存泄漏。

【问题讨论】:

    标签: ios


    【解决方案1】:

    看起来还不错:

    1. viewDidLoad的开头加上[super viewDidLoad];
    2. viewWillAppear:开头加上[super viewWillAppear:animated];

    【讨论】:

      【解决方案2】:

      你应该在 dealloc 方法中释放 locationManager。

      - (void)dealloc
      {
          [locationManager release];
          [super dealloc];
      }
      

      原因是viewDidUnload 不能保证被调用。

      有关详细信息,请参阅以下问题:

      When is UIViewController viewDidUnload called?

      viewdidunload is not getting called at all!

      【讨论】:

      • 你是对的......我已经用 Instrument 进行了检查,我发布的上述代码存在内存泄漏......这就是我问这个问题的原因......它似乎与 dealloc 一起工作正常..
      猜你喜欢
      • 2011-10-14
      • 2012-12-06
      • 2011-04-05
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多