在appDelegate
我正在使用LocationManager
:
- (void)locationManager: (CLLocationManager *)manager
didUpdateToLocation: (CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
float latitude = newLocation.coordinate.latitude;
strLatitude = [NSString stringWithFormat:@"%f",latitude];
float longitude = newLocation.coordinate.longitude;
strLongitude = [NSString stringWithFormat:@"%f", longitude];
[self CheckOperation];
}
strLatitude 和 strLongitude 是全局字符串。这绝对没问题。即使在分析应用程序时,我也没有任何内存泄漏。但是,当我描述我的应用程序时,我收到内存泄漏
strLatitude = [NSString stringWithFormat:@"%f",latitude];
和
strLongitude = [NSString stringWithFormat:@"%f", longitude];
32字节。
我该如何解决?
答案 0 :(得分:5)
你确定你看到了泄漏而不仅仅是分配吗?
如果你确实在这里发生泄漏,那么就有一些潜在的嫌疑人:
你在使用ARC吗?如果没有,这里有一些可能的问题:
你是否以dealloc发布它?
如果此方法多次运行,则在重新分配之前不会释放最后一个值。
如果您没有使用复制语义,并且您将此字符串引用传递给其他人,并且它们没有正确释放它,那么您也将获得此行的回溯。
编辑:
(根据以下评论)
你应该意识到stringWithFormat:
正在分配一个字符串并在其上排队自动释放...所以你需要将它保留在某处。
我认为你在某个地方这样做是因为你没有得到“EXC_BAD_ACCESS” - 而是据说是泄密。
你不应该泄漏一个自动释放的对象,除非你把它保留在某处(因此假设)。
鉴于您需要将其保留在某个地方,我的上述建议是有效的 - 每个保留都需要匹配的版本。
我同意您应该使用这些字符串的属性。
转换它们很简单 - 并为您处理很多事情。
在您的界面中:
@property (nonatomic, copy) NSString * strLatitude;
在您的实施中:
@synthesize strLatitude;
分配:
self.strLatitude = ...
(“自我”部分很重要)
并确保在dealloc中将其设置为nil。