类 -(MyAnnotation 注释)被释放

Posted

技术标签:

【中文标题】类 -(MyAnnotation 注释)被释放【英文标题】:class -(MyAnnotation annotation) was deallocated 【发布时间】:2013-03-06 07:12:09 【问题描述】:

类的实例 0x11d0ce4b0 -(MyAnnotation annotation) 是 在键值观察者仍向其注册时释放。 观察信息被泄露,甚至可能被错误附加 到其他对象。在 NSKVODeallocateBreak 上设置断点以停止 在调试器中。这是当前的观察信息:

但是我已经在我的 dealloc 方法上放置了一个断点,并且在那里,我确实取消了这些通知的注册。调用了 Dealloc,我确实检查了它是否是同一个对象,并且所有取消注册的调用都在那里。所以我不知道它怎么可能移除观察者。

【问题讨论】:

你是不是偶然注册了两次? 【参考方案1】:

创建自定义AnnotationView

#import <MapKit/MapKit.h>

@interface AnnotationView : MKPlacemark

@property (nonatomic, readwrite, assign) CLLocationCoordinate2D coordinate;

@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *subtitle;


@end

.m file

#import "AnnotationView.h"

@implementation AnnotationView

- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate addressDictionary:(NSDictionary *)addressDictionary

    if ((self = [super initWithCoordinate:coordinate addressDictionary:addressDictionary]))
    
        self.coordinate = coordinate;
    
    return self;


@end

// 使用注解在你的相关.m file中添加#import "AnnotationView.h"

CLLocationCoordinate2D pCoordinate ;
pCoordinate.latitude = LatValue;
pCoordinate.longitude = LanValue;

// Create Obj Of  AnnotationView class  

AnnotationView *annotation = [[AnnotationView alloc] initWithCoordinate:pCoordinate addressDictionary:nil] ;

    annotation.title = @"I m Here";
    annotation.subtitle = @"This is Sub Tiitle";

[self.mapView addAnnotation:annotation];

以上是如何创建AnnotationView的简单示例。

【讨论】:

以上是关于类 -(MyAnnotation 注释)被释放的主要内容,如果未能解决你的问题,请参考以下文章

5GC基础自学系列 | 5G核心网基本信令之AN释放流程

从 JSON 设置后立即释放模型属性

CWinThread类,使用后要不要使用CloseHandle释放内核

等待 GLContext 被释放

面向对象类的特殊成员方法

Test is not an annotation type 异常