MKMapView 在其超级视图被解除分配后仍然向委托发送消息

2024-02-10

编辑:更改了标题。我当时不知道,但这是重复的如果我不再使用 MKMapView,为什么在释放它后我会崩溃? https://stackoverflow.com/questions/2188098/why-am-i-crashing-after-mkmapview-is-freed-if-im-no-longer-using-it


这个问题类似于为什么使用 ARC + NSZombieEnabled 时对象未释放 https://stackoverflow.com/questions/8408071/why-is-object-not-dealloced-when-using-arc-nszombieenabled但足够不同,我认为值得把它扔在那里,以防有人理解并向我解释正在发生的事情。另一个问题可能是 XCode bug,所以我认为这可能是类似的。

设想:

  1. RootViewController has a tableView显示一堆项目
  2. 选择一个单元格会呈现一个模式detailViewController包含另一个tableView
  3. 中的表格单元格之一detailViewController包含一个MKMapView显示该项目的位置
  4. mapView.delegate = detailViewController
  5. 关闭模式detailViewController

此后不久,应用程序崩溃了MKMapView sends mapView:viewForAnnotation:到现在已释放的detailViewController。此崩溃在具有临时发行版本的用户设备上重现,因此该问题与NSZombieEnabled.

我能够通过添加以下内容来解决崩溃问题:

_mapView.delegate = nil;

to the dealloc的方法tableViewCell包含地图视图。

问题:为什么在释放单元格时需要将委托清零?似乎是mapView当单元被解除分配时,应该由 ARC 解除分配,而无需这样做。零代表是一个很好的做法,但我认为在这种情况下不需要这样做。

编辑:两者的所有子视图detailViewControllerUITableViewCells被声明为(nonatomic, strong)属性阿拉:

@property (nonatomic, strong)   MKMapView *         mapView;

编辑2:我想我需要更好地阅读文档。 @fluchtpunkt 是正确的。以下是来自的相关信息MKMapView文档:

在释放已设置了 MKMapView 对象之前 delegate,记住将该对象的 delegate 属性设置为 nil。一 您可以执行此操作的地方是在您处置的 dealloc 方法中 地图视图。


MKMapView 不是用 ARC 编译的,因此该属性delegate仍然被声明为assign代替weak.
来自MKMapView 文档 http://developer.apple.com/library/ios/documentation/MapKit/Reference/MKMapView_Class/MKMapView/MKMapView.html#//apple_ref/occ/instp/MKMapView/delegate:

@property(nonatomic, assign) id<MKMapViewDelegate> delegate

并从过渡到 ARC 发行说明 http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html:

如果您需要管理资源而不是释放实例变量,您可以实现 dealloc 方法。您不必(实际上不能)释放实例变量,但是您可能需要在系统类上调用 [systemClassInstance setDelegate:nil]以及其他未使用 ARC 编译的代码。


对于系统类(NS*、UI*)的委托,您必须使用“旧”规则,在释放委托对象时将委托设置为 nil。

所以添加一个 dealloc 方法到你的detailViewController

- (void)dealloc {
    self.mapView.delegate = nil;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MKMapView 在其超级视图被解除分配后仍然向委托发送消息 的相关文章

  • GMSMapView 中的倒多边形

    我必须在我的 iPhone 项目中使用 Google 地图 并且我正在使用 GMSPolygon 来绘制多边形 但是如何填充地图上除多边形内部之外的所有位置 就像下图一样 谢谢 我玩过你的问题 主要思想是用多边形填充整个地球 然后为您的特定
  • 如何确定iPhone铃声的当前级别?

    我正在使用 AVSystemController 将 iPhone 铃声静音 但我不知道如何确定铃声的当前级别 有任何想法吗 PS 是的 我知道使用 AVSystemController 可能会导致应用程序被 App Store 禁止 这不
  • UISplitViewController - 推送模态视图

    使用 UISplitViewController 时推送模态视图的最佳实践是什么 您会从 RootViewController DetailViewController 还是直接从应用程序委托推送 理想情况下 我想要实现的功能是在基于某些条
  • 由于语言错误,Itunes Connect 无法提交

    Thats all it shows https i stack imgur com 0aZm8 png 我不确定它没有告诉我出了什么问题 it shows its linked to the language https i stack
  • 如何在 Swift 3 中解析 JSON 数组 [重复]

    这个问题在这里已经有答案了 我从 Socket 获取了一些我想访问的数据 但收到错误消息 指出每次都无法将 NSArray 转换为 NSDictionary struct SocketEventHandler let event Strin
  • 暂停视频录制[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试创建一个应用程序 用户可以在其中从相机录制视频 该应用程序的功能之一必须是文件录制中的暂停 例如 用户通过按 开始 按钮开始
  • Swift - 选择值后隐藏 pickerView

    我发现了类似的问题 他们的答案很有帮助 但我坚持最后一件事 我试图在点击字段时显示 pickerView 然后选择数据时 我希望 pickerView 隐藏 我可以从 pickerView 获取数据来隐藏 但是 pickerView 后面仍
  • 适用于 Objective-C / iPhone 的良好 HTTP 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 UPDATE 这个问题显然已经过时了 参见日期 我建议只使用现代 iOS7 功能 例如 NSURLSession 我想 这个问题是为了历史
  • 确定 NSView 是否绘制的正确方法

    有没有正确的方法来确定是否NSView实际上是否在当前视图层次结构中绘制 考虑以下情况 视图完全在屏幕外 不是强制性的 该视图不在视图层次结构的顶部 The isHidden and isHiddenOrHasHiddenAncestor不
  • PresentModalViewController 不执行任何操作

    我有一个 UIViewController parent 调用presentModalViewController与另一个 UIViewController child on viewDidLoad If parent没有 UINaviga
  • iOS UIButton 带有圆角和背景 bug

    我发现圆形 UIButton 存在一个奇怪的问题 这是我创建此按钮的代码块 let roundedButton UIButton type System roundedButton frame CGRectMake 100 100 100
  • 无法使用 Xamarin 和 WCF 访问 Web 服务

    我想使用 Xamarin 和 WCF 来使用公共 Web 服务 对于这个演示 我将使用Xamarin iOS 这是我试图使用的 公共 网络服务 http www webservicex net globalweather asmx WSDL
  • 混合静态和动态 UITableViewController 内容会导致 NSRangeException

    我一直在寻找这个错误 并找到了一些具有类似行为的帖子 但没有解决问题的解决方案 我有一个 UITableViewController 在 SB 中声明为静态 它具有以下部分 第 0 部分 配方 是静态的 有 4 个单元格 第 1 部分 口味
  • iPhone 快照,包括键盘

    我正在寻找拍摄整个 iPhone 屏幕 包括键盘 的正确方法 我找到了一些截取屏幕的代码 CGRect screenCaptureRect UIScreen mainScreen bounds UIView viewWhereYouWant
  • iOS WKWebView.scrollView委托导致BAD_ACCESS

    我的 viewController 有一个 UIView 属性 其中包含一个 WKWebView 我将 WKWebView rollView 委托设置为我的 viewController 它是我的 UIView 子类的公共函数 并在我的 v
  • 我什么时候应该对 IBOutlet 使用弱或强限定符? [复制]

    这个问题在这里已经有答案了 可能的重复 ARC 下 IBOutlets 应该强还是弱 https stackoverflow com questions 7678469 should iboutlets be strong or weak
  • 将 iPhone 上的 stderr 写入文件和控制台

    我正在遵循答案中的建议here https stackoverflow com questions 5179108 iphone how to read application logs from device用于将 iOS 设备上的 NS
  • 我应该在哪个方法中设置 UITextField 的委托?

    在 viewDidLoad 或 init 方法中设置 UITextField 的委托是一个好习惯吗 我尝试在 init 方法中将委托设置为 self 但它没有调用相应的委托方法 当我将代码移动到 viewDidLoad 中时 它注册为将 s
  • ActionScript、NetStream.Play.Failed iOS AIR 移动设备

    我正在尝试以类似于 Tiberiu Ionu Stan http stackoverflow com questions 2036107 aac mp4 not working in actionscript 3s netstream 的方
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we

随机推荐

  • Power Bi 中具有多轴的重叠条形图

    我想在 PowerBi 中有一个具有多个轴的重叠条形图 我有一个来自 Excel 的示例 如果可能的话 我希望在 PowerBi 中重新创建该示例 这里是例子 这在 PowerBi 中可能吗 也许通过使用我不知道的自定义视觉效果 提前致谢
  • AudioPlayer iOS 和 m4a

    我制作了一个使用 AVAudioPlayer 播放音乐的应用程序 它上传或下载歌曲 将它们写入核心数据 然后在选择时调用它们来播放 我测试过的所有 15 首歌曲都可以在 iPhone 音乐客户端和我自己的电脑上正常运行 但是 其中三个无法在
  • 动态复选框创建

    我想在我的 Android 应用程序运行时动态创建一组复选框 当应用程序运行时 除了按钮之外什么都不显示 我忘记了什么 提前致谢 public class DataNotificationSurvey extends Activity pr
  • 使用 PHP 在 CSV 文件中用双引号将每个字段括起来?

    我需要使用 PHP 将所有带有双引号的字符串和数字放入 CSV 文件中 如何从 PHP 创建 CSV 文件 并将所有数据放在双引号内 我正在使用此代码生成 CSV 我正在使用 codeigniter 框架 array array array
  • jQuery 切换 Cookie 支持

    我正在尝试将 jQuery Cookie 插件实现到我的幻灯片切换脚本中 但到目前为止尚未成功 这是我的代码 没有任何 cookie 实现 jQuery document ready function a toggle click func
  • Eclipse 缩进指南

    我正在尝试从以下网页安装 eclipse 的缩进指南插件 http sschaef github io IndentGuide http sschaef github io IndentGuide 我之前没有在 eclipse 中安装过插件
  • 进行机器间锁定有哪些好方法?

    我们的服务器集群由 20 台机器组成 每台机器有 10 个 5 个线程的 pid 我们想要某种方法来防止任何机器上任何 pid 中的任何两个线程同时修改同一个对象 我们的代码是用 Python 编写的并在 Linux 上运行 如果这有助于缩
  • 当应用程序在 WP 8.1 商店应用程序中恢复时,应用程序恢复事件不会触发

    我的 WP 8 1 商店应用程序的行为非常奇怪 当我快速离开然后返回时 应用程序恢复事件会按预期触发 但是 如果我将应用程序保留在后台一段时间 然后返回时 应用程序将触发 Constructor 和 OnNavigateTo 事件而不是 R
  • 检查 Rust 中的整数溢出[重复]

    这个问题在这里已经有答案了 Rust 有没有一种规范的方法来显式检查整数溢出 我用谷歌搜索但找不到答案 就像是 match add or overflow x y None gt println overflow Some z gt pri
  • 如何子类化 UILabel、UIButton 等 UI 元素

    我正在子类化UILabel in a CustomLabel class 当我尝试使用简单的方法时遇到问题UILabel我希望将来对其他元素进行子类化 我读到我可以创建一个category of UILabel 这东西哪一个比较好呢 类别还
  • Ansible Galaxy 角色安装到特定目录?

    所以我想我应该尽可能开始使用 Ansible Galaxy 而不是编写自己的角色 我刚刚安装了我的第一个角色 它被安装到 etc local ansible roles 我在 OSX 上 现在我想知道你如何在我真正需要的地方安装这个角色 我
  • Visual Studio 2012 附带哪个版本的 Dinkumware STL Lib?

    在早期版本的 Visual Studio 中 有一个预定义的宏 CPPLIB VER 它报告此版本 VS 附带的 Dinkumware STL 库的版本 截至 2012 年 我无法找到或使用这个宏 它未定义 并且我无法在网上找到有关此事的任
  • Sitecore 中的常规链接

    我是 Sitecore 的新手 我创建了一个页面模板 并为 常规链接 类型的 URL 添加了一个字段 我为链接文本创建了另一个字段 这是该项目中的标准做法 我只是想在我的用户控件中显示链接 但我无法让它工作 这应该很简单 但我在兜圈子 这是
  • 非焦点窗体上的 C#/WPF 热键(如 launchy)

    Is it possible to catch a hotkey eg Ctrl Space from a not focused form to make it appear whenever someone uses this spec
  • 我可以在 Fortran 中使用可分配数组作为意图(输出)矩阵吗?

    考虑以下子例程 subroutine myProc m n flag X Integer intent in m n logical intent in flag real 8 intent out allocatable X if fla
  • 在我的 Pixel Shader(UWP、Win2D)中支持多种颜色输入

    我一直在开发一款可以提供颜色替换的应用程序 并且在解决方案上从 Jet Chopper 获得了很多帮助 他为我提供了以下代码 该代码本质上使用 ControlSpectrum 控件来控制源颜色和目标颜色 这个想法是您指定一个源颜色 然后将其
  • 使用 JQuery Ajax Post 调用渲染简单的 ASP.NET MVC PartialView

    我的 MVC 控制器中有以下代码 HttpPost public PartialViewResult GetPartialDiv int id drop down value PartyInvites Models GuestRespons
  • 如何开始使用 Akka Streams? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Akka Streams 库已经提供了相当多的丰富的文档 http doc akka io docs akka 2 4 2 RC1 s
  • SPSS - 合并具有 ID 变量重复案例和新案例/变量的文件

    我有一个多年来商店访问的管理数据集 我正在尝试将其合并到ID多变的 每个数据集都有一个重复项ID发生在不同的商店访问期间 注释为Date 一些较新的数据文件也有新变量 Y 不包含在旧数据文件中 不同年份的数据集也会包含不同的案例 由不同的案
  • MKMapView 在其超级视图被解除分配后仍然向委托发送消息

    编辑 更改了标题 我当时不知道 但这是重复的如果我不再使用 MKMapView 为什么在释放它后我会崩溃 https stackoverflow com questions 2188098 why am i crashing after m