相关疑难解决方法(0)

如何使用Instruments分析内存使用情况和性能?

在所有仪器跟踪模板中,我喜欢使用:

  • 僵尸来检测对象被过度释放的位置,非常适合调试EXEC_BAD_ACCESS错误.
  • 漏洞检测内存泄漏.
  • 核心动画w颜色混合图层可检测帧速率和半透明子视图,非常适合平滑UITableView滚动.

我总是听到人们说要描述我的应用程序的内存使用情况和性能.

  1. 为什么要分析内存使用情况和性能?我的应用运行良好.
  2. 我该怎么做?

我使用了Allocations,看到我的iPhone应用程序的总分配内存为1 MB,正常使用后增长到​​5 MB.iPhone上的内存使用量是多少?iPad的?苹果电脑?

performance xcode profiling allocation instruments

52
推荐指数
2
解决办法
6万
查看次数

iOS的乐器:为什么Memory Monitor不同意Allocations?

从这些从乐器拍摄的屏幕中可以看出,Allocations认为我的应用程序(Ongo)仅使用7.55 MB的内存,而Memory Monitor则表示53.30.此外,自由系统内存与应用程序使用的内存量几乎没有任何关联.有谁知道为什么这两个工具之间存在如此大的分歧?另外,是否可以找到低系统内存的来源或如何防止它快速耗尽?我的应用程序似乎没有泄漏内存,但不知何故,它耗尽了系统资源.

谢谢

仪器YU Lie?

iphone memory-management ipad ios xcode-instruments

26
推荐指数
2
解决办法
8305
查看次数

问题是在UIScrollView中使用相当大的图像来释放UIImageViews所使用的内存

我有一个大的UIScrollView,我正在放置3-4个相当大(320x1500像素左右)的UIImageView图像拼贴.我将这些UIImageViews添加到我的NIB文件内的滚动视图中.我的控制器上有一个插座,那就是UIScrollView.我正在使用一个属性(非原子,保留),并将其合并.

我的问题是:当我在Memory Monitor中观察到这一点时,我可以看到,当加载了所有这些图像的视图时(正如预期的那样),所使用的内存会相当大.但是当我离开视图时,它和它的控制器都是dealloc'd,但似乎并没有放弃它们占用的内存附近的任何地方.当我将其中一个视图(我的应用程序中有几个)切割成只有1-3个320x460的图像并将其他所有内容保持相同时,它会重新捕获内存.

使用这么大的图像有什么问题吗?我在这段代码中做错了什么(粘贴在下面)?

这是viewController的一个导致问题的片段.

- (CGFloat)findHeight 
{
    UIImageView *imageView = nil;
    NSArray *subviews = [self.scrollView subviews];

    CGFloat maxYLoc = 0;
    for (imageView in subviews)
    {
            if ([imageView isKindOfClass:[UIImageView class]])
            {
                    CGRect frame = imageView.frame;

                    if ((frame.origin.y + frame.size.height) > maxYLoc) {
                            maxYLoc  = frame.origin.y;
                            maxYLoc += frame.size.height;
                    }
            }
    }
    return maxYLoc;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.scrollView setContentSize:CGSizeMake(320, [self findHeight])];

    [self.scrollView setCanCancelContentTouches:NO];
    self.scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
    self.scrollView.clipsToBounds = YES;                
    self.scrollView.scrollEnabled = YES;

    self.scrollView.pagingEnabled = NO;
}

- (void)dealloc …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch memory-management objective-c

11
推荐指数
1
解决办法
1万
查看次数

在CocoaTouch(iPhone OS)中,如何找到/消除Instruments Leak工具找不到的泄漏?

我有一个在模拟器中运行良好的iPhone应用程序.通过摆脱一切并非绝对必要的东西,它可以很好地响应记忆警告.当我在设备上运行它时,它运行良好.但是在经过一定程度的使用后,它崩溃了,错误代码为101 - 据我所知,操作系统会因内存使用情况而将其查杀.我可以看到内存警告(我正在记录它),我的应用程序响应它,但此后不久就死了.

如果我查看仪器中的应用程序(在设备上或在SIM卡中),它没有发现任何泄漏.此外,净内存使用量在600-700k字节的范围内.从我的应用程序的不同视图转换会增加内存使用量(正如预期的那样),但是当视图和控制器被释放并释放时,内存使用量从未像现在这样低.但是,添加通常只有1000-2000字节的范围内.因此,虽然泄漏显示我没有泄漏,但我怀疑某处存在问题.我还查看了我正在分配的所有对象,所有这些对象似乎都按预期进行了回收.我看到的唯一不断增加的对象是GeneralBlock-N(其中N是一些数字)

我不应该关注仪器净使用量数字吗?尝试诊断问题的后续步骤是什么?

ADDED:我没有调用malloc()或任何会返回我负责的缓冲区的CoreFoundation库.我正在进行的唯一非Obj-C调用是将语句记录到NSLog.

iphone cocoa-touch memory-management

4
推荐指数
1
解决办法
2695
查看次数