我正在为iOS开发并使用IPhone和IPad检查我的应用程序.
我收到很多内存警告(调用didReceiveMemoryWarning),但不知道为什么.我的应用程序在峰值点使用~35MB,在最低点使用4-5 MB.
我试图使用'仪器'找到泄漏,但找不到任何关键问题.
有没有一个很好的方法来找出系统发出内存警告的原因?
我可以简单地模拟单个触摸 - 在我的测试中点击,滑动,按住等,但完全坚持使用Android 2.2在HTСDesire上模拟多点触控.
请问您能告诉我,如何重现事件链以测试多点触摸?
我想我需要使用一些棘手的MotionEvent,如MASK或类似的东西,但不知道如何做到这一点.
我在这里找到了转载缩放事件的转储:http: //www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2-part-3-understanding-touch- ?事件/ 1775 =标签mantle_skin;内容
1. event ACTION_DOWN[#0(pid 0)=135,179]
2. event ACTION_MOVE[#0(pid 0)=135,184]
3. event ACTION_MOVE[#0(pid 0)=144,205]
4. event ACTION_MOVE[#0(pid 0)=152,227]
5. event ACTION_POINTER_DOWN(pid 1)[#0(pid 0)=153,230;#1(pid 1)=380,538]
6. event ACTION_MOVE[#0(pid 0)=153,231;#1(pid 1)=380,538]
7. event ACTION_MOVE[#0(pid 0)=155,236;#1(pid 1)=364,512]
8. event ACTION_MOVE[#0(pid 0)=157,240;#1(pid 1)=350,498]
9. event ACTION_MOVE[#0(pid 0)=158,245;#1(pid 1)=343,494]
10. event ACTION_POINTER_UP(pid 0)[#0(pid 0)=158,247;#1(pid 1)=336,484]
11. event ACTION_MOVE[#0(pid 1)=334,481]
12. event ACTION_MOVE[#0(pid 1)=328,472]
13. event ACTION_UP[#0(pid 1)=327,471]
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
我正在尝试使用仪器来处理一些低内存条件.我可以看到物理内存空闲监视器中的内存消耗下降到几MB,即使分配显示所有分配大约为3 MB且总字节数为34 MB.
我已经开始遇到崩溃,因为我将一些操作移动到一个带有NSOperationQueue的单独线程.但是在改变之前我并没有使用乐器.尽管如此,我打赌我做了一些我可以撤消以阻止崩溃的事情.
顺便说一句,没有仪器或连接调试器,它会更加稳定.
我的泄漏几乎没有(在崩溃之前最多可能是一百字节).
当我看Allocations时,我只看到非常原始的对象.并且它报告的总内存也非常低.所以我无法看到我的应用程序如何导致这些低内存警告.
当我从启动时看Heap Shots时,我看不到大约3 MB,在基线和所有堆增长值的总和之间.
我应该怎么看才能找到问题所在?例如,我可以将它隔离到我的一个视图控制器实例吗?或者我的其他一个例子?
我做了什么: 我关闭了设备并重新启动,这带来了显着的改进.仪器未报告低内存警告.另外,我注意到启动时的物理空闲内存在重新启动之前只有大约7 MB,重启后大约为60 MB.
但是,我看到物理可用内存非常规则(周期性)下降,从43 MB下降到6 MB(然后再回升到43 MB).我想知道它造成什么.我没有在这个应用程序中运行任何计时器.(我确实有一些performSelector:afterDelay :,但是在这些测试中它们没有活动.)
我没有使用ARC.
我正在使用乐器,但我只看到0x00345等时间分析器我没有看到任何客观的c代码,虽然我启用'show objective c only'选项...任何帮助赞赏!

当我尝试使用UIAutomation在设备上捕获UI输入时,它会挂起"开始捕获".
1) I click on Profile in Xcode which
2) Starts up Instruments where I select Automation and click Profile
3) Which starts Instruments running. In Scripts I select Add->Create which shows the record button at the bottom
4) I click the record button and it hangs saying "Starting Capture" and doesn't record my UI input.
Run Code Online (Sandbox Code Playgroud)
我的Profile方案的Build Configuration是Debug.
知道我错过了什么导致UIAutomation挂起?
安装Xcode5软件包时出现问题.我正在使用小牛队 - 不确定这是否相关.
无法在模拟器中分配分配.仪器将在模拟器中加载并启动应用程序但不是分配日志,我看到:

有没有人面对这个问题?
我使用了来自Apple文档的AVPlayerDemo示例,并在其上面编写了我自己的UI,以播放从UITableViewController中选择的视频.现在,问题是这里有一个内存泄漏,我无法找到.问题是AVPlayer对象没有被解除分配,我猜这是因为每次按下后退按钮并选择要播放的新视频时,应用程序消耗的总内存会大幅跳跃,如下所示:

视频第一次播放时,内存使用量为36.6MB,现在是第二次:

它已经跃升至58.2MB,并且每次我回去再次播放视频或不同的视频时都会继续增加.

我曾尝试使用带泄漏的仪器,但尚未弄清楚它有什么问题.
下面是整个Controller文件代码.
//编辑
-(void) viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
if(_player.rate == 1.0){
[_player pause];
}
[idleTimer invalidate];
if(mTimeObserver){
[_player removeTimeObserver:mTimeObserver];
mTimeObserver = nil;
}
[_playerItem removeObserver:self forKeyPath:kStatusKeyT];
[[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object:_playerItem];
_player = nil;
_playerItem = nil;
idleTimer = nil;
_tapGestureRecognizer = nil;
}
-(void) dealloc
{
NSLog(@"DEALLOCING");
}
Run Code Online (Sandbox Code Playgroud) 几天前,'time profiler'停止了工作.其他乐器仍然有效...核心动画,分配等.时间分析器只是一个空白屏幕.没有显示函数调用,没有图表,没有.多个项目的结果相同.
我刚刚重新安装了Xcode(自己).同样的问题.我找不到任何可以删除仪器的偏好文件.我真的,真的需要这个工作.我没有时间重新安装整个操作系统.

编辑:删除com.apple.dt.instruments.plist不会改变任何内容.在仪器的控制台中找到这些日志(如下).看起来有趣的事情正在发生,并且可能值得向Apple提交一个错误.目前,问题是 - 如何将仪器的状态重置为应该的状态?
1/10/14 9:12:02.690 am Instruments[30211]: WebKit Threading Violation - initial use of WebKit from a secondary thread.
1/10/14 9:12:02.887 am Instruments[30211]: Invalid color System, labelColor (warning given only once)
1/10/14 9:12:04.761 am Instruments[30211]: <XRHorizontalFillSplitView: 0x6180001440a0>: the delegate <PFTTraceDocument: 0x7fda11423d90> was sent -splitView:resizeSubviewsWithOldSize: and left the subview frames in an inconsistent state:
1/10/14 9:12:04.761 am Instruments[30211]: Split view bounds: {{0, 0}, {1000, 629}}
1/10/14 9:12:04.761 am Instruments[30211]: Subview frame: {{0, 0}, {1232, 247}}
1/10/14 …Run Code Online (Sandbox Code Playgroud) 当我从Xcode运行我的应用程序时,很明显我有内存泄漏:
当我呈现一个自定义的ViewController时,内存会增加,但是当我解除它时,它不会再回落.
所以我也使用了仪器的分配工具进行了检查,但这说明了一个不同的故事:
正如您所看到的,当我呈现ViewController时,Instruments会显示尖峰,但是当它被解除时,内存使用量会回落到之前的水平.
我已经检查了我的代码至少15次,我个人找不到任何内存泄漏,因此同意仪器.我还在deinit我的所有对象中实现了这样的函数,如下所示:
deinit {
print("Deinnited \(id)")
}
Run Code Online (Sandbox Code Playgroud)
并且所有对象都按预期打印到控制台.
会发生什么事?我在用:
Run和Profile的模式都在"debug"中
instruments ×10
ios ×7
xcode ×5
profiling ×3
ipad ×2
iphone ×2
memory-leaks ×2
android ×1
avplayer ×1
cocoa-touch ×1
ios5 ×1
multi-touch ×1
objective-c ×1
swift ×1
testing ×1