diff options
Diffstat (limited to 'platform/darwin/src/MGLStyleLayer.mm')
-rw-r--r-- | platform/darwin/src/MGLStyleLayer.mm | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/platform/darwin/src/MGLStyleLayer.mm b/platform/darwin/src/MGLStyleLayer.mm index 05885bc63e..7847cbb319 100644 --- a/platform/darwin/src/MGLStyleLayer.mm +++ b/platform/darwin/src/MGLStyleLayer.mm @@ -14,13 +14,14 @@ const MGLExceptionName MGLInvalidStyleLayerException = @"MGLInvalidStyleLayerExc @implementation MGLStyleLayer { std::unique_ptr<mbgl::style::Layer> _pendingLayer; + mapbox::base::WeakPtr<mbgl::style::Layer> _weakLayer; } - (instancetype)initWithRawLayer:(mbgl::style::Layer *)rawLayer { if (self = [super init]) { _identifier = @(rawLayer->getID().c_str()); - _rawLayer = rawLayer; - _rawLayer->peer = LayerWrapper { self }; + _weakLayer = rawLayer->makeWeakPtr(); + rawLayer->peer = LayerWrapper { self }; } return self; } @@ -32,6 +33,11 @@ const MGLExceptionName MGLInvalidStyleLayerException = @"MGLInvalidStyleLayerExc return self; } +- (mbgl::style::Layer *)rawLayer +{ + return _weakLayer.get(); +} + - (void)addToStyle:(MGLStyle *)style belowLayer:(MGLStyleLayer *)otherLayer { if (_pendingLayer == nullptr) { @@ -103,9 +109,15 @@ const MGLExceptionName MGLInvalidStyleLayerException = @"MGLInvalidStyleLayerExc - (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p; identifier = %@; visible = %@>", - NSStringFromClass([self class]), (void *)self, self.identifier, - self.visible ? @"YES" : @"NO"]; + if (self.rawLayer) { + return [NSString stringWithFormat:@"<%@: %p; identifier = %@; visible = %@>", + NSStringFromClass([self class]), (void *)self, self.identifier, + self.visible ? @"YES" : @"NO"]; + } + else { + return [NSString stringWithFormat:@"<%@: %p; identifier = %@; visible = NO>", + NSStringFromClass([self class]), (void *)self, self.identifier]; + } } @end |