这是Obj-C中的内存泄漏吗?

时间:2010-06-28 22:48:46

标签: objective-c

int someFunction (CLLocation *currentLocation) {
  double latitude = 12.3f;
  double longitude = 22.5f;
  CLLocationDistance d1 = [currentLocation distanceFromLocation:
   [[CLLocation alloc] initWithLatitude:latitude longitude:longitude]];
  return 0;
}

3 个答案:

答案 0 :(得分:3)

是。您正在分配第二个CLLocation以传递给distanceFromLocation而不释放它。

你可以这样做:

CLLocationDistance d1 = [currentLocation distanceFromLocation:
  [[[CLLocation alloc] initWithLatitude:latitude longitude:longitude] autorelease]];

(或其他各种事情。请参阅docs,正如@whisty在评论中所建议的那样。)

(此外,进行调用并将其值分配给d1然后将其扔掉也无意义。)

答案 1 :(得分:2)

是。您分配CLLocation对象但从不释放它。我强烈建议您阅读memory management guide

答案 2 :(得分:1)

是。 Objective-C的内存管理看起来很复杂,但记住一条基本规则会带你走远:

  

如果使用名称以“alloc”或“new”开头或包含“copy”(例如,alloc,newObject或mutableCopy)的方法创建对象,或者如果发送它,则获取对象的所有权保留信息。您有责任使用release或autorelease放弃您拥有的对象的所有权。在收到对象的任何其他时间,您都不能释放它。

您在没有allocrelease的情况下致电autorelease,因此违反了规则。