int someFunction (CLLocation *currentLocation) {
double latitude = 12.3f;
double longitude = 22.5f;
CLLocationDistance d1 = [currentLocation distanceFromLocation:
[[CLLocation alloc] initWithLatitude:latitude longitude:longitude]];
return 0;
}
答案 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放弃您拥有的对象的所有权。在收到对象的任何其他时间,您都不能释放它。
您在没有alloc
或release
的情况下致电autorelease
,因此违反了规则。