我有一种情况,需要在自动发布池中添加每个新对象。此操作每秒调用约60次。在这样做的过程中,对象的保留计数将继续递增。从这个意义上说,自动释放池的内容并没有被释放。但当执行某些事件(鼠标、键盘)时,自动释放池会释放其内容对象。有人知道这个问题背后的原因吗?
是的,只有在事件周期结束后才调用autoreleasepool。在主运行循环中,管理和触发一个接一个的事件。当事件不在运行循环中时,它是理想的。所以当事件循环在现有的主运行循环池中结束时,自动释放调用。因此,当您触发一些事件(如鼠标、键盘)时,您的autoreleased被调用,这意味着您的主运行循环结束当前事件循环,并为鼠标和键盘启动新的事件循环,就在开始新的事件周期之前,它运行autorelease池以清除池中的所有对象。
浏览RunLoopManagement文档和CreatingThreads