我正在开发的应用程序的一部分涉及 UIPageViewController,其中每个页面都显示一个存储在核心数据中的“条目”。条目包括一些图像,这些图像被压缩并存储为 NSData。因此,为了加载这些图像并将它们显示在页面上,我使用了 imageWithData,即
photo.image = [UIImage imageWithData:entry.photo];
问题是 imageWithData 不是特别快,因此翻阅页面的响应速度不如我希望的那样。解决这种情况的最佳尝试是将一些由我的 UIPageViewController 显示的 View Controller 预加载到一个数组中。 (不确定这是否是最好的做法,但你知道了)
所以,澄清一下,我有一个导航 Controller ,它包含 viewControllerA,然后链接到 viewControllerB - 它显示 UIPageView 和 entryController(每个页面上有一个 entryController)。问题是,当我使用导航栏从 viewControllerB 返回到 viewControllerA 时,我希望从内存中释放 viewControllerB 的 entryController 数组。但是,ARC 似乎并没有这样做。因此,在 viewControllerA 和 viewControllerB 之间来回几次,每次翻几页后,我开始收到内存警告 - 这最终清除了当前的 entryControllers 数组,并且违背了拥有该数组的目的,因为每次收到内存警告时都必须重新加载条目。
简而言之,当我通过导航 Controller 返回 viewControllerA 时,ARC 不会清除我为 viewControllerB 分配的任何内存。我不喜欢那样。如果有人可以提出发生这种情况的原因,或者让我知道我是否以错误的方式处理这整件事,我们将不胜感激。我只是想加快从一页到下一页的过渡!
非常感谢。
最佳答案
ARC 不释放你的内存的唯一原因是你仍然把它保留在某个地方。只有你知道那是哪里。
通常,这是由保留循环引起的,这在 block 中很容易发生。
但是,您很可能在 Controller 、iVar 或某个集合中的某个地方保留指向对象的指针。
您是否对您的代码运行了静态分析器?它非常擅长找到其中的一些东西。
仪器告诉您什么?它有一些用于查找泄漏和保留周期的简洁工具。
编辑
您可以根据需要拥有对任何对象的尽可能多的引用。一旦计数归零,它将被释放。
问题是您将一个强指针数组作为缓存保存在 View Controller 中。如果你想释放它们,你必须手动将这些指针置零。您以某种方式将 Controller 预加载到数组中。在您卸载它们之前,它们会一直存活。
所以,只要你有一个指向某物的强指针,它就会一直存在。
关于ios - 在导航 Controller 中转到 "back"时,ARC 未释放内存 - 它正在减慢我的 uipageviewcontroller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11805543/
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我有一大串格式化数据(例如JSON),我想使用Psychinruby同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que