Ios 带有CFNotificationCenter强引用的UIViewController赢得';t释放
我有一个视图控制器,一旦其父视图控制器从视图层次结构中移除并释放,它就永远不会释放。内存图中它的每个实例看起来都是一样的,因为它只有一个对Ios 带有CFNotificationCenter强引用的UIViewController赢得';t释放,ios,xcode,memory,automatic-ref-counting,Ios,Xcode,Memory,Automatic Ref Counting,我有一个视图控制器,一旦其父视图控制器从视图层次结构中移除并释放,它就永远不会释放。内存图中它的每个实例看起来都是一样的,因为它只有一个对CFNotificationCenter的引用。看起来,不同类的其他不相关的视图控制器都具有相同的引用,但仍然会被释放。所讨论的视图控制器也没有任何NotificationCenter观察者,因此这对我来说没有意义 我附上了一张内存图的图片,上面有编辑过的视图控制器的真实名称。我也确信这是视图控制器的完整图形,我还没有选择检查单个参考 这里发生了什么?为什么
CFNotificationCenter
的引用。看起来,不同类的其他不相关的视图控制器都具有相同的引用,但仍然会被释放。所讨论的视图控制器也没有任何NotificationCenter
观察者,因此这对我来说没有意义
我附上了一张内存图的图片,上面有编辑过的视图控制器的真实名称。我也确信这是视图控制器的完整图形,我还没有选择检查单个参考
这里发生了什么?为什么不发布?您可以确切地看到引用视图控制器的代码: 首先,为您的方案启用Malloc堆栈日志记录(使用Cmd Shift-,,打开方案编辑器) 然后,单击指向视图控制器的“malloc”块,将鼠标移到Backtrace右侧,找到“展开”按钮以查看完整的堆栈跟踪: 然而,最有可能的罪魁祸首实际上不是保留视图控制器的通知,因为引用不强(否则它将是一个粗体的箭头)
Xcode内存图调试器不会显示对象何时保留自身。在我的例子中,这是一个简单的例子,在我的
viewDidLoad
中的闭包中保留self
。