Tag: memory

使用高分辨率纹理优化SceneKit性能

我是一个相当有经验的iOS开发人员,但总共是一个SceneKit新手,试图在一个基本的应用程序中模拟一些行星。 为此,我使用火星,金星等高分辨率的正常和散射图,应用于基本领域。 他们工作! 他们看起来真棒,正是我想要的。 问题是,我正因为质量/记忆的折衷而死亡 。 我可以缩小纹理的尺寸以减less内存占用,但低于一定的分辨率时,结果(特别是法线贴图)开始变得非常糟糕和可怕。 该应用程序需要能够至less放大到行星是屏幕宽度的地方,但要保持山区和山谷的任何脆度,我需要使用一个约6000×3000的PNG法线贴图(上图)。我可以缩放漫reflection地图的方式下降到1000 x 500左右,但即使如此, 我从一个单一的球体周期性的记忆崩溃轻轻旋转,一个单一的光线,没有背景,没有物理,没有其他几何。 现在, 我知道这是一个超高分辨率的法线贴图。 我知道了。 但与此同时,这只是一个领域,什么都不做。 这甚至没有接近其他应用程序完美执行的一些复杂性,即使有一些非常细腻的纹理也是如此。 似乎必须有一些方法可以获得单个对象的高细节表面纹理,而不会崩溃应用程序。 所以,作为一个SceneKit的新手,我想知道: 在没有使用全部内存的情况下,获得好的SceneKit纹理质量有什么技巧吗? 也许是一种处理图像纹理,重新编码文件,改变场景/节点设置等的方式? 任何方式都可以用较小的图像获得清晰的质量,或者使用相同的图像来降低内存使用率? 我很高兴地引用一些代码,但是现在没有太多可以显示的东西。 我将这些纹理以标准的方式应用到SceneKit节点,并且工作正常。 我只是因为缺乏记忆力或缺乏图像质量而死亡。 谁能帮我吗?

UIImage内存不释放VM:ImageIO_JPEG_DATA?

我在屏幕上有多个水平滚动的collections视图。 他们都充满了图像。 所有这些图像都通过Parse api在后台加载。 我正在运行Instrument的分配和匿名VM:ImageIO_JPEG_DATA类别占用了正在使用的大部分内存。 应用程序中的所有内存大约等于40,然后这个类别超过55,这就使总数大约为100.这个类别从来没有下降过,只是保持一致。 我能做些什么来从我的collections视图中的图像中释放这些内存? 以下是我的collections视图的代码: .m为我的collections视图控制器 – (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionViewCell" forIndexPath:indexPath]; if (cell) { [cell.loadingImageIndicator setHidden:NO]; [cell.loadingImageIndicator startAnimating]; id photo = [self.collectionViewPhotos objectAtIndex:indexPath.item]; if ([photo isKindOfClass:[PFObject class]]) { PFObject *photoObject = (PFObject *)photo; PFFile *imageFile = [photoObject objectForKey:kPhotoPictureKey]; [cell.cellImage setFile:imageFile]; [cell.cellImage loadInBackground:^(UIImage *image, NSError […]

Objective-C:将图像与以前保存的其他图像进行比较

我有一个关于在Objective-C中比较UIImage的问题,当一个图像已经通过使用NSSearchPathForDirectoriesInDomains方法的保存和加载过程。 我想要的目标是指导用户到一个新的屏幕上点击取决于图像显示。 为了简单起见,假设有两种可能性 – 黑色图像和绿色图像。 点击黑色的图像将您带到xib1,然后点击绿色的图像将您带到xib2。 这很简单,直到我实现了一个保存和加载系统。 为了节省我做了以下几点: paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); documentsDirectory = [paths objectAtIndex:0]; pngFilePath = [NSString stringWithFormat:@"%@/test.png",documentsDirectory]; data1 = [NSData dataWithData:UIImagePNGRepresentation([level1part1 objectAtIndex:0])]; [data1 writeToFile:pngFilePath atomically:YES]; 并加载我做了以下几点: paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); documentsDirectory = [paths objectAtIndex:0]; pngFilePath = [NSString stringWithFormat:@"%@/test.png",documentsDirectory]; UIImage *image = [UIImage imageWithContentsOfFile:pngFilePath]; [button1 setImage:image forState:UIControlStateNormal]; 这很好,当我退出程序并重新启动时,图像保留在屏幕上,因为我希望它。 假设我们假设现在出现在button1上的图像是绿色的图像。 当我点击发件人ID(这是button1)的button后,我调用下面的代码: if(sender.currentImage […]