【发布时间】: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