将GMSMarker添加到地图时,应用程序仅在iPhone 5上崩溃:EXC_BAD_ACCESS

时间:2017-09-12 05:46:01

标签: ios objective-c memory-management google-maps-sdk-ios iphone-5

我正在开发的应用程序在谷歌地图上绘制了很多GMSMarkers。除了iPhone 5之外,它在所有其他设备中都能正常工作。我已经将GMSMarker子类化,并将对象id设置为子类。这样做是为了我可以将标记添加到NSSet并确保只有不同的标记被绘制而没有重复。子类是:

@implementation BYOMarker
-(BOOL)isEqual:(id)object
{
    BYOMarker *otherMarker = (BYOMarker *)object;
    if (self.objectID.intValue == otherMarker.objectID.intValue) {
        return YES;
    }
    return NO;
}
-(NSUInteger)hash
{
    return  [self.objectID hash];
}
@end

.h文件

#import <GoogleMaps/GoogleMaps.h>

@interface BYOMarker : GMSMarker
@property (assign, nonatomic) NSNumber  *objectID;
@end

在使用EXC_BAD_ACCESS异常返回散列函数时,应用程序崩溃。我启用了Zombie对象,并在设置标记的地图对象时尝试打印po marker.objectID,我收到以下错误:

*** -[CFNumber respondsToSelector:]: message sent to deallocated instance 0x80416470
0x80416470

任何帮助?! TIA

1 个答案:

答案 0 :(得分:2)

您的objectID媒体资源存在内存管理问题。不要将assign用于对象指针属性。使用strong

@property (strong, nonatomic) NSNumber *objectID;