gpt4 book ai didi

iphone - 对于使用 MKAnnotation、CGBitmapContextCreate 和 NSOperationQueue 开发的 map 功能,应用程序在 iOS 7 上崩溃

转载 作者:太空狗 更新时间:2023-10-30 03:45:53 24 4
gpt4 key购买 nike

我们的应用程序具有基于 map 和 GPS 的位置跟踪功能。此应用程序已上传至 Apple Store。该应用程序包含以下功能:

  • map 显示实时交通数据 显示实时交通事件(事故、交通堵塞等)
  • 用户的 GPS 位置跟踪该应用程序在 iOS 版本 5 和 6 上运行良好。在应用程序中运行 map 功能时,我们面临以下 iOS 7 Beta 崩溃问题。我们使用了 iOS 的以下功能来在 map 上呈现交通数据和交通事件:

  • MKAnnotation 渲染交通事件

  • 为了呈现交通数据,应用使用 CGBitmapContextCreate 函数。

    context = CGBitmapContextCreate (NULL,
    self.mapView.frame.size.width,
    self.mapView.frame.size.height,
    8,// bits per component
    bitmapBytesPerRow,
    colorSpace,
    kCGImageAlphaPremultipliedLast);

    CGContextSetAllowsAntialiasing (context,YES)
  • 画线以在位图上下文中显示流量数据。

  • 创建的位图上下文将使用 MKAnnotation API 显示在 map 上。

  • 应用程序使用 NSOperationQueue 来呈现流量和事件数据,因为用户与 map 的交互是流畅的。以下是代码片段:

     [queue addOperationWithBlock:^{ [Set the required data], [Update the UI] }];

以下是随机操作 map 功能时生成的两个崩溃日志。

崩溃日志 - 1

事件

Identifier: 471EAE21-E118-4E3D-AAAE-D7D82B1D6326

CrashReporter

Key:

bdbf75eb30240449214769478f38830aa7a14f7f

Hardware

Model: iPhone5,2

Process: {Application Name} [246]

Path: /var/mobile/Applications/4FA0A7F2-4998-4F8F-A4C6-66D849D074B8/{Application Name}.app/{Application Name}

Identifier: {Application bunald name}

Version: X.X.X.X

Code

Type: ARM (Native)

Parent

Process: launchd [1]

Date/Time: 2013-08-30 14:21:24.523 +0530

OS

Version: iOS 7.0 (11A4449d)

Report

Version: 104

Exception

Type: EXC_BAD_ACCESS (SIGSEGV)

Exception

Subtype: KERN_INVALID_ADDRESS at 0x8000000c

Triggered

by Thread: 0

Thread

0 Crashed:

0 libobjc.A.dylib 0x38ed3b66

objc_msgSend + 6

1 CoreFoundation 0x2ede773c -[__NSSetM removeObject:] + 92

2 MapKit 0x3002de96 -[MKAnnotationManager

_removeRepresentationForAnnotation:fromCull:] + 490

3 MapKit 0x3004bc54 -[MKAnnotationManager

_removeAnnotation:updateVisible:removeFromContainer:] + 272

4 MapKit 0x3004bb38 -[MKAnnotationManager removeAnnotation:] + 24

5 SLIM 0x00165828 -[TravelStarViewController

mapView:viewForAnnotation:] (TravelStarViewController.m:1735)

6 MapKit 0x3005ea86 -[MKMapView

annotationManager:representationForAnnotation:] + 74

7 MapKit 0x3002a136 -[MKAnnotationManager _addRepresentationForAnnotation:]

+ 362

8 MapKit 0x30028c4a -[MKAnnotationManager updateVisibleAnnotations] +

1034

9 Foundation 0x2f876358 __NSFireTimer + 60

10 CoreFoundation 0x2ee7ae84 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__

+ 12

11 CoreFoundation 0x2ee7aa9e __CFRunLoopDoTimer + 790

12 CoreFoundation 0x2ee78e26 __CFRunLoopRun + 1214

13 CoreFoundation 0x2ede353c CFRunLoopRunSpecific + 520

14 CoreFoundation 0x2ede331e CFRunLoopRunInMode + 102

15 GraphicsServices 0x3387733e

GSEventRunModal + 134

16 UIKit 0x313fc7b0 UIApplicationMain + 1132

17 SLIM 0x000f3fa6

main (main.m:15)

18 SLIM 0x000f3efc start + 36

最佳答案

我认为可能是交通事件在 NSOperation 中进入并持续了很长时间。操作可以开始,然后引用 MapView 中不再存在的 map 图形元素。例如,用户可能正在滚动 map ,NSOperation 可能会“排队”,然后在目标区域超出视野时结束。崩溃显然是内存违规。通常由试图访问已释放内存的代码引起。

我建议您研究一下您对 NSOperationQueue 的使用。我可以看到它如何使 map 交互更顺畅,这部分可能没问题,但加上“事件”可能会导致问题。

从崩溃中我可以看到它正在 CFRunLoop 上运行并且 NSTimer 正在触发。 NSTimers 因在 Objective C 中无法完全停止而臭名昭著。当它们最终启动时,与它们一起工作的元素通常已完成并释放了它们的内存。

关于iphone - 对于使用 MKAnnotation、CGBitmapContextCreate 和 NSOperationQueue 开发的 map 功能,应用程序在 iOS 7 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19139693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com