我有很多这样的注释(约2400),但这是我的问题。
我收到以下错误
在第81行分配并存储到的对象的潜在泄漏 'annot1' 在第81行分配的对象的潜在泄漏并存储在'annot2'
中在第81行分配并存储到的对象的潜在泄漏 'annot3'
等等。这是我的代码:
MKPointAnnotation *annot1 = [[MKPointAnnotation alloc] init];
annot1.title = @"A";
annot1.subtitle=@"A1";
annot1.coordinate = CLLocationCoordinate2DMake(21.978954, 120.752663);
[mapView addAnnotation:annot1];
MKPointAnnotation *annot2 = [[MKPointAnnotation alloc] init];
annot2.title = @"B";
annot2.subtitle=@"B2";
annot2.coordinate = CLLocationCoordinate2DMake(21.988607, 120.748703);
[mapView addAnnotation:annot2];
MKPointAnnotation *annot4 = [[MKPointAnnotation alloc] init];
annot4.title = @"C";
annot4.subtitle=@"C1";
annot4.coordinate = CLLocationCoordinate2DMake(22.008867, 120.743637);
[mapView addAnnotation:annot4];
MKPointAnnotation ***strong text**annot5 = [[MKPointAnnotation alloc] init];
annot5.title = @"D";
annot5.subtitle=@"D1";
annot5.coordinate = CLLocationCoordinate2DMake(22.016190, 120.837601);
[mapView addAnnotation:annot5];
MKPointAnnotation *annot6 = [[MKPointAnnotation alloc] init];
annot6.title = @"E";
annot6.subtitle=@"E1";
annot6.coordinate = CLLocationCoordinate2DMake(22.024183, 120.743401);
[mapView addAnnotation:annot6];
MKPointAnnotation *annot7 = [[MKPointAnnotation alloc] init];
annot7.title = @"F";
annot7.subtitle=@"F1";
annot7.coordinate = CLLocationCoordinate2DMake(22.055653, 121.509689);
[mapView addAnnotation:annot7];
MKPointAnnotation *annot8 = [[MKPointAnnotation alloc] init];
annot8.title = @"G";
annot8.subtitle=@"G2";
annot8.coordinate = CLLocationCoordinate2DMake(22.070082, 120.713684);
[mapView addAnnotation:annot8];
等
{
答案 0 :(得分:1)
如果您不使用ARC,则应在将对象添加到mapview后释放该对象。
例如:
MKPointAnnotation *annot1 = [[MKPointAnnotation alloc] init];
annot1.title = @"A";
annot1.subtitle=@"A1";
annot1.coordinate = CLLocationCoordinate2DMake(21.978954, 120.752663);
[mapView addAnnotation:annot1];
应更新为:
MKPointAnnotation *annot1 = [[MKPointAnnotation alloc] init];
annot1.title = @"A";
annot1.subtitle=@"A1";
annot1.coordinate = CLLocationCoordinate2DMake(21.978954, 120.752663);
[mapView addAnnotation:annot1];
[annot1 release]
原因是您的对象引用计数从未达到零,并且对象永远不会被释放。
MKPointAnnotation *annot1 = [[MKPointAnnotation alloc] init];
分配对象时,其引用计数为1.如果将对象添加到数组或字典,则引用计数会递增。因此,在下面的代码块之后,您的引用计数为2。
MKPointAnnotation *annot1 = [[MKPointAnnotation alloc] init];
annot1.title = @"A";
annot1.subtitle=@"A1";
annot1.coordinate = CLLocationCoordinate2DMake(21.978954, 120.752663);
[mapView addAnnotation:annot1]
现在,如果在将其添加到mapview后调用annot1上的release,则该对象尚未真正发布。这是因为mapview中的数据结构保留了对它的引用。
[mapView addAnnotation:annot1]
一旦你完成了mapview并且它被释放,那么annot1最终会被破坏。