我的项目有图像共享功能。在此功能中,我的应用程序会询问用户您要共享的库。
我在下面编写了代码来分配图像,从默认库/自定义库中检索。
设备默认库
imgVwMediaFile.image = [UIImage imageWithCGImage:[asset thumbnail]; //(ALAsset *)资产
自定义库(图像位于Documents / image / user)
imgVwMediaFile.image = [UIImage imageWithContentsOfFile:path]; //(的NSString *)路径
应用程序在具有自定义单元格的集合视图中显示此图像。
当我选择应用程序自定义库时,图像将从Documents目录中检索,但 imagewithcontentofFile 耗费大约90到100 Mb的内存。
在其他情况下,当我选择应用程序默认的libray时,它不会消耗超过8或10 Mb的内存。
我尝试了来自堆栈Q / A的不同代码用于自定义库,但仍存在内存问题。
-1-
CGImageRef iref = [[UIImage imageNamed:asset] CGImage] ;
imgVwMediaFile.image=[UIImage imageWithCGImage:iref];
iref=nil
-2-
NSData *imageData = [[NSData alloc] initWithContentsOfFile:path];
imgVwMediaFile.image=[UIImage imageWithData:imageData];
imageData=nil
-3-
imgVwMediaFile.image=[UIImage imageNamed:path];
所以请指导我,如何从文档目录中加载图像?
在不增加内存负载的情况下从文档目录加载图像的最佳方法是什么?
答案 0 :(得分:1)
问题是您保存到磁盘的图像很大,因此加载大量的图像会显示在集合中会占用大量内存。您可以使用内置库中的缩略图,以便看到不同的结果。
理想情况下,您可以在自定义库中保存缩略图文件夹并显示它们,然后,在选择图像时,获取相应的完整尺寸图像(这是所有照片库使用的方法)。或者你可以动态调整图像的大小,但你的滚动基本上可以保证很糟糕。
答案 1 :(得分:-1)
// abstract class
abstract class A
{
public abstract void MethodOne();
}
// class B inherits A
class B : A
{
public override void MethodOne()
{
Console.WriteLine("From Class B");
}
}
// class C inherits B
class C : B
{
public override void MethodOne()
{
Console.WriteLine("From Class C");
}
}
// class D inherits C
class D : C
{
public override void MethodOne()
{
Console.WriteLine("From Class D");
}
}
// etc......
// class Main method Class
class MainClass
{
public static void Main()
{
B[] TestArray = new B[3];
B b1 = new B();
C c1 = new C();
D d1 = new D();
TestArray[0] = b1;
TestArray[1] = c1;
TestArray[2] = d1;
for (int i = 0; i < TestArray.Length; i++)
{
TestArray[i].MethodOne();
}
Console.ReadLine();
}
}