如何正确调整图像大小而不记忆

时间:2015-06-09 09:09:28

标签: ios objective-c memory-management memory-leaks

我在文档目录中没有存储任何图像(例如:考虑60+)。我必须在表格视图中显示所有这些图像。这些图像很大,所以我按照这个链接调整图像大小http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/

这里我在cellforrow中创建的代码是:

@autoreleasepool {

            dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
            dispatch_async(queue, ^{


                    NSString *folderPath = [self getEduCurrentDiractoryPath];
                    NSString *filePath = [folderPath stringByAppendingPathComponent:[message.internalUrl.absoluteString lastPathComponent]];
                    NSLog(@"currentDirectoryPath %@",filePath);

                    dispatch_sync(dispatch_get_main_queue(), ^{

                        cell.message.thumbnail = [[UIImage imageWithContentsOfFile:filePath] resizedImage:CGSizeMake(210, 170) interpolationQuality:kCGInterpolationLow];

                    });
            });
        }

现在,当我检查INSTRUMENTS以查看ALLOCATIONS并尝试查找内存警告时,它会显示以下结果:

所以在这里你可以看到resizeimage:interpolationQuality方法显示168MB分配,其中我的项目ARC已启用,我已将该代码放在@autoreleasepool中......但它没有释放分配的内存...

enter image description here

任何人都可以帮助我如何正确地重新调整图像而不会得到记忆警告,或者有人可以指出我在哪里犯错误..任何帮助都将受到赞赏.. !!!感谢..

2 个答案:

答案 0 :(得分:0)

试试这个。这里imgProf是我的图像名称。

import re,time,sys
cpuNum=0
if len(sys.argv)==1:
    print "use pidcpu <pid1,pid2,..,pidn>"
    sys.exit(0)

pids=sys.argv.pop()

def getCpuTot():
    global cpuNum
    f=open("/proc/stat","r")
    ln=f.read()
    f.close()
    #cpu  858286704 148088 54216880 117129864 2806189 5046 16997674 0 0 0
    r=re.findall("cpu[\d\s]{1}\s+(\d+)\s(\d+)\s(\d+)\s(\d+)\s.*?",ln,re.DOTALL)
    cpuNum=len(r)-1
    return int(r[0][0])+int(r[0][1])+int(r[0][2])+int(r[0][3])

def getPidCPU(pid):
    f=open("/proc/"+ str(pid) +"/stat","r")
    ln=f.readline()
    f.close()
    a=ln.split(" ")
    return int(a[13])+int(a[14])

cpu1=getCpuTot()
cpupid1=[]
for pid in pids.split(","):
    cpupid1.append(getPidCPU(pid))
time.sleep(1)
cpu2=getCpuTot()    
cpupid2=[]
for pid in pids.split(","):
    cpupid2.append(getPidCPU(pid))


i=0
for pid in pids.split(","):
    perc=int(cpuNum*(cpupid2[i]-cpupid1[i])*100/float(cpu2-cpu1))
    i+=1
    print pid,perc

这是我创建的用于调整图像大小的功能。

imgProf = [self imageWithImage:imgProf scaledToSize:CGSizeMake(400, 400)];

答案 1 :(得分:0)

不要在cellforrow方法中编码,U应该在reloadData之前完成缩略图。