【问题标题】:Memory eaten by [NSOperationQueue mainQueue] addOperationWithBlock [duplicate][NSOperationQueue mainQueue] addOperationWithBlock 占用的内存 [重复]
【发布时间】:2016-08-24 15:01:49
【问题描述】:

在mainQueue中设置buttons的背景颜色时,我可以看到iOS设备的内存使用量每次点击都会增加几百千字节。这是我正在使用的代码:

for(int i=0; i<99;i++){

    int x=arc4random_uniform(8);
    int y=arc4random_uniform(8);

    [[NSOperationQueue mainQueue] addOperationWithBlock:^{

    if(i%2==0)
        [buttons[x][y] setBackgroundColor:[UIColor grayColor]];
    else
        [buttons[x][y] setBackgroundColor:[UIColor redColor]];

    }];

队列执行得很好,但之后似乎没有释放buttons。我尝试使用不做任何事情的 ARC,可能它不会将其识别为泄漏。如果我删除使颜色交替的代码(每次只设置相同的颜色),内存使用量不会增加。

我没有在队列中放入任何一条语句,它也不占用内存,所以我确定它是某个地方的僵尸buttons但是,我不知道如何从那里找到/清除它们。

非常感谢与 ARC 配合使用的解决方案。

编辑:如果我在不使用 mainQueue 的情况下设置了 backgroundColor,则内存使用量不会增加。

编辑 2:这就是乐器的外观。我看不到任何占用所有内存的特定内容,某些值似乎与我单击的频率呈线性关系。请告诉我是否还有其他内容我可以单击以获取更多详细信息

【问题讨论】:

  • 您发布的内容中没有明显的内存泄漏或保留周期。你可以使用 Instruments 来查看哪些对象还活着吗?
  • 嘿伙计,我附上了一些截图
  • 此代码没有任何泄露、废弃或缓存的内存问题。我通过内存增长为零的泄漏/分配工具运行它。问题无疑是某些方案设置的结果(例如,请参阅“启用队列回溯”选项:stackoverflow.com/q/34336920/1271826)和/或仪器记录设置(例如,打开僵尸会导致这种增长)。
  • 干杯 Rob,你是绝对正确的!

标签: ios objective-c


【解决方案1】:

正如@Rob 猜测的那样,启用了“回溯记录”。

取自Memory leak with "libBacktraceRecording.dylib" in React Native ios application 的答案,您必须删除“编辑方案”弹出窗口中的勾号

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-17
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多