- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
更新:此泄漏已得到解决。如果您遇到类似的泄漏并且您的应用程序是多线程的,那么您很可能是从后台线程进行 UIKit 调用;利用例如[NSThread PerformSelectorOnMainThread:]
将 UIKit 调用路由到主线程,这是 唯一允许它们的地方。
我最近一直在我当前的项目上运行 Leaks 来查找泄漏,并且我不断遇到这些“泄漏”,据我所知,这些“泄漏”并不是真正的泄漏。根据 Leaks 的说法,直接取自该项目的以下代码有两个泄漏:
- (NSArray *)areaForIndex:(int)index
{
NSMutableArray *a = [NSMutableArray arrayWithArray:
[world retrieveNeighborsForIndex:index]]; // leak 1
[a insertObject:[references objectAtIndex:index] atIndex:0];
return [NSArray arrayWithArray:a]; // leak 2
}
如果我将第一行更改为:
,泄漏 1 就会消失(请参阅更新 2-3)
如果我将最后一行更改为:Leak 2 就会消失:
return a;
不幸的是,我不能用泄漏 1 来做到这一点,因为我正在将一个不可变数组转换为一个可变数组。不过,无论如何, arrayWithArray 应该自动释放,所以据我所知,它不应该泄漏任何内容。有什么想法为什么会发生这种情况吗?
更新:我已经在设备和模拟器上对此进行了测试。两者都存在泄漏。但是,在模拟器上我获得了有关此泄漏的一些附加信息:
泄漏的历史记录如下:
# | Category | Event Type | Timestamp | RefCt | Address | Size | Responsible Library | Responsible Caller
--+----------+-------------+
0 | CFArray | Malloc | 00:09.598 | 1 | 0x474f6d0 | 48 | asynchro | -[muddyGrid areaForIndex:]
1 | CFArray | Autorelease | 00:09.598 | | 0x474f6d0 | 0 | Foundation | NSRecordAllocationEvent
2 | CFArray | CFRetain | 00:09.598 | 2 | 0x474f7d0 | 0 | Foundation | -[NSCFArray retain]
3 | CFArray | CFRelease | 00:09.611 | 1 | 0x474f7d0 | 0 | Foundation | NSPopAutoreleasePool
从上面我可以看出,自动释放的数组以某种方式保留了两次,然后自动释放,保留计数为 1。但不知道在哪里或为什么......
更新 2 和 3:我尝试将泄漏 1 的行更改为:
NSMutableArray *a = [[[NSMutableArray alloc] initWithArray:
[world retrieveNeighborsForIndex:index]] autorelease];
我认为这消除了泄漏,但最终并没有。所以我还是很茫然。
最佳答案
虎头蛇尾的是,当我用代码解决了一堆其他问题时,这个问题就自行解决了。
主要是,代码中有很多地方在主线程之外进行 UI 更新,这是一个很大的禁忌。这些其他不相关的问题之一必定触发了上述代码中的内存泄漏,因为它不再报告任何泄漏(目前我的泄漏为 0),尽管我没有修改任何代码。
关于iphone - Leaks (instrument) 报告自动释放对象中的泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3135132/
这个问题在这里已经有了答案: What is instrumentation? (5 个回答) 4年前关闭。 正如标题所暗示的那样。很多解释真的很模糊,谁能提供一个更可靠的定义? 该术语在 Andro
我正在使用java.lang.instrument包来获取java对象的内存大小(可以嵌套)。 我使用下面的方法来获取对象大小: import java.lang.instrument.Instrum
Xcode Instruments 中是否有一个 Instrument 可以记录我的代码进行的所有调用(无论是否有 Apple 自己的框架)。 最接近的工具似乎是 Time Profiler。 但是,
当我使用 xCode 运行我的应用程序时,所有负载都运行良好。当我使用 Activity Monitor 或 Allocations 的分析模板加载 Instruments 并按下记录时,它加载并运行
如果我尝试使用 import java.lang.instrument.Instrumentation; 它说这个语句无法解决。可能出什么问题了?我使用的是jdk1.6。 最佳答案 您确定这正是您的导
当我尝试运行 SignUpFragmentTest 类时,出现错误“未注册检测!必须在注册检测下运行”。我认为当我使用@Rule 时会抛出错误。 import android.support.test
是否可以在 JUnit 测试中使用 java.lang.instrument.Instrumentation?我正在使用 mockrunner 来模拟一个 Servlet,并想测量 session 中
我最近搬到了另一台电脑,需要重置我的所有环境。 所以,这个测试以前是有效的。 但是我不记得我以前使用的是哪个版本的 Java/JDK。 好吧,问题是: java.lang.instrument.Ill
我是 Xcode 和 iOS 的新手,今天一直在尝试使用 Instruments 工具。有些事情我正在努力解决: 场景: 我创建了一个简单的应用程序,它使用 UISearchBar 过滤 UITabl
我使用 java.lang.instrument.Instrumentation#redefineClasses() 重新定义现有类。有时,我需要重新定义几个类。 如果我一个一个地重新定义类,我就会知
要检查 iOS 应用程序的内存使用情况,请说代码是否为 int n = 1000000; NSObject *bar = [[NSObject alloc] init]; foo = [[NSMuta
我正在尝试通过 Corda Hello world example (特别是 Java 版本)。 我已经到了 nodes should be deployed但这失败了: > ./gradlew cl
(Xcode 4.5) 当从命令行运行仪器时,它第一次可以工作,但直到我重新启动后它才会再次运行。 仪器的详细输出包括: Instruments : Loading template 'file://
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 2年前关闭。 Improve this questi
我是 zipkin 和 brave api 的新手,用于分发跟踪。我在本地主机上设置了一个 zipkin 服务器,监听端口 9411。我执行了下面的函数,但在我的 zipkin 服务器中没有显示任何跟
我正在开发一个名为 "Cloudnet-v3" 的开源项目。我在本地计算机上使用符号链接(symbolic link)/data 到 IntelliJProjects-Folder 中的数据点。 我得
我目前正在使用 Android 仪器测试测试我的示例应用程序。默认情况下,项目创建 AndroidTest文件夹给我。我只是在文件夹中添加了更多测试用例。 我以前用expresso触发 UI 按钮,但
好的,这是我的问题,如果重复,我深表歉意。我进行了搜索,但找不到任何我认为相关的内容。 当我从 xcode 运行仪器并开始测试我的应用程序是否存在内存泄漏或分配时,我的 iMac 最终开始运行得很慢。
我在 Xcode 中启动 Time Profiler 时遇到问题,无论是 Mac 应用程序还是 iPhone 应用程序。 我尝试过的步骤是打开时间分析器,单击选择目标下拉框,选择我的 iPhone 或
我想调试我的核心动画代码。但是,仪器配置文件不存在,并且在仪器库中也不可用。 我正在使用 Xcode 4。如何安装/访问它并使其正常工作? 最佳答案 核心动画分析只能从设备上获得。如果您正在分析模拟器
我是一名优秀的程序员,十分优秀!