Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 带有CFNotificationCenter强引用的UIViewController赢得';t释放_Ios_Xcode_Memory_Automatic Ref Counting - Fatal编程技术网

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