我在文档目录中没有存储任何图像(例如:考虑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中......但它没有释放分配的内存...
任何人都可以帮助我如何正确地重新调整图像而不会得到记忆警告,或者有人可以指出我在哪里犯错误..任何帮助都将受到赞赏.. !!!感谢..
答案 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之前完成缩略图。