我使用OpenAL在我的应用程序中播放声音.当我使用Instruments工具测试它时,它会发现泄漏:
LeakedObject = GeneralBlock-512
Size = 512 Bytes
Responsible Library = AudioToolbox
Responsible Frame = AU3DMixerEmbeddedInputElement :: Initialize()
堆栈跟踪:
0 libSystem.B.dylib malloc
1 libstdc++.6.dylib operator new(unsigned long)
2 libstdc++.6.dylib operator new[](unsigned long)
3 AudioToolbox AU3DMixerEmbeddedInputElement::Initialize()
4 AudioToolbox AU3DMixerEmbedded::SetProperty(unsigned long, unsigned long, unsigned long, void const*, unsigned long)
5 AudioToolbox AUBase::DispatchSetProperty(unsigned long, unsigned long, unsigned long, void const*, unsigned long)
6 AudioToolbox AUMethodSetProperty(void*, unsigned long, unsigned long, unsigned long, void const*, unsigned long)
7 OpenAL OALContext::InitializeMixer(unsigned long)
8 OpenAL …Run Code Online (Sandbox Code Playgroud) 我花了一些时间来调试ARC和自定义dealloc函数的一个奇怪的问题.
NSOperation类的DataRequestDataRequest保持对我生成的操作的唯一引用,并在操作完成块中销毁.它总是被破坏(它dealloc总是被执行)dealloc.我只有一个NSLog调用.......问题是:
如果我在调试器中运行它,dealloc中的断点永远不会被命中,日志消息永远不会出现.主要是我以为操作漏了.
如果我在仪器中运行它,一切都很好,系统控制台打印消息,Allocations仪器报告从正确的堆栈快照中释放的操作,包括自定义dealloc.没有检测到泄漏.
我100%确定我使用相同的编译器设置进行调试和分析.
最后最令人困惑的事情:如果我创建了一个自定义版本[DataRequest dealloc]并且我付诸实践self.operation = nil;- 即使从调试器中也可以正常工作.
有没有人提示某些编译器链接器选项试图看到一些区别?这可能是Apple工具中的错误(我们所有人都在为我们自己的错误指责一条大鱼,对吧?)
......是的,我尝试过使用GDB和LLDB.结果是一样的 - 可能表明什么.
我试图创建一个简约的样本,但它只是工作(确实);)
谢谢
我想获得的价值"HELLO"的UILabel在iPad模拟器中.我已启用辅助功能并将标签设置为"Label Access".但是当我调用时target.logElementTree(),名称和值都被设置为"LabelAccess",并且就apple文档而言,值字段应该包含设置的字符串(在本例中"Hello").有人知道解决这个问题吗?
PS:我使用的是最新的iOS SDK和Xcode. Apple Stack Exchange



因此,在运行Objective-C应用程序大约8小时后,最终我的机器将显示此错误消息.但是在使用仪器24小时后,它只完成了应用程序在没有仪器的情况下8小时内可以完成的操作的大约1%.
我的应用程序基本上采用输入几何并创建一个导航网格.
我的问题:我怎样才能找出问题所在?我肯定在我的应用程序的某个地方,我要求记忆,永远不要释放它.我运行了分析,发现了一个漏洞,但并不重要,我已修复它.
我现在正在运行仪器进行分配/泄漏但是在16分钟后我没有看到任何明显的东西(我会让它继续下去).
以下是迄今为止所处位置的快照:

任何人对我如何调试这个有任何想法?我希望能够运行大约20个小时,以便完成它不可避免地死亡:/
提前致谢!
我在设备上调试应用程序.它完美地工作了一段时间,然后停止并显示错误消息"App因内存压力而终止".没有错误或崩溃日志.
为什么会这样?我该如何解决这个问题?我的应用程序在运行时使用10到30 mb ram.那是很多吗?
更新:使用乐器后,我得到了这个..任何人都可以解释内存分配????
![![]](https://i.stack.imgur.com/ONdl0.png)
更新:我试过仪器,发现泄漏.我有一些这样的事情

我不明白它是什么意思,以及如何解决这个问题????
我有一个实用功能,我怀疑它占用了应用程序执行时间的很大一部分.使用Time Profiler查看调用堆栈,此函数占用调用它的任何函数的大部分执行时间.但是,由于此实用程序功能是从许多不同的来源调用的,因此我无法确定总体而言,这是否是我的优化时间的最佳用途.
如何在程序执行期间查看在此函数中花费的总时间,无论是谁调用它?
为清楚起见,我想将所选条目与该函数的所有其他调用组合到一个条目中:

我只是在玩泄漏并试图故意创造一个.所以,即使做这样的事情也很愚蠢:
class LeakingObjectA{
var strongRefToB:LeakingObjectB?
deinit{ print("LeakingObjectA deinit")}
}
class LeakingObjectB{
var strongRefToA:LeakingObjectA?
deinit{ print("LeakingObjectB deinit")}
}
Run Code Online (Sandbox Code Playgroud)
这对于科学目的来说很好,这创造了一个强大的参考周期.
现在didMoveToView我在内部声明局部常量并像这样发生泄漏:
override func didMoveToView(view: SKView) {
let a = LeakingObjectA()
let b = LeakingObjectB()
a.strongRefToB = b
b.strongRefToA = a
}
Run Code Online (Sandbox Code Playgroud)
另一个场景转换后,现场的deinit正确调用,但是deinits从a和b实例并不实际调用.
另外我说泄漏,因为这实际上是在仪器中检测到泄漏:
现在,如果我将这两个本地变量声明为场景的属性,则仪器检测到泄漏之间存在差异:
class GameScene:SKScene {
let a = LeakingObjectA()
let b = LeakingObjectB()
//...later in didMoveToView method I make a strong reference cycle like from the …Run Code Online (Sandbox Code Playgroud) 我一直在尝试解决毛刺表视图滚动性能问题.通过Instrument的Time Profiler运行它表明花费了相当多的时间将NSAttributedString设置为UILabel.这是一个已知的问题吗?如果是这样,有解决方法吗?
我看到一些报道称在iOS8上创建NSAttributedString的速度非常慢,并且在iOS9上有所改进,但它是否也将它设置为包含UI元素的速度慢?在iOS 8下,NSAttributedString性能更差
下面是我的分析屏幕截图.请注意,视图模型不会动态创建属性字符串,因此您看到的成本完全来自赋值.当然,UILabel可以执行昂贵的操作,我不知道如何绕行.
我感谢任何帮助.
在最新版本的Instruments 8.3中,显示设置按钮已被删除,并由文件 - >记录设置对话框替换.
使用分配工具时,我现在无法再激活自动快照,因为该选项已从右侧面板中消失,而记录选项对话框仅显示分配工具的值,但不显示vm跟踪器的值.记录选项对话框
有人知道选项被移动到哪里了吗?
非常感谢
当我尝试运行仪器核心图形测试时,我发现这样的错误"目标设备服务太旧了"
instruments ×10
ios ×5
xcode ×5
memory-leaks ×2
dealloc ×1
debugging ×1
iphone ×1
memory ×1
objective-c ×1
performance ×1
sprite-kit ×1
swift ×1
uikit ×1
uilabel ×1