Tag: 内存

NSManagedObjectContext executeFetchRequest返回不稳定的对象,导致EXC_BAD_ACCESS,SIGABRT等

我的猜测是我在这里错过了一些核心数据的基本理解,但在这里: 我在我的应用程序中有几个提取请求来处理不同事情的检索。 在某些情况下,代码运行正常,返回请求的对象。 在某些情况下,它会返回看起来已经被释放的对象(例如,稍后尝试引用返回的结果给出EXC_BAD_ACCESS)的几行代码。 当我在代码中设置各种断点和日志语句并逐步完成时,还会在代码中的其他位置获得偶然的SIGABRT或EXC_BAD_ACCESS。 在任何情况下,似乎是在我参考提取请求的结果时。 下面是一个这样的获取请求的示例: // Who am I? NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *signedInPersonId = [defaults stringForKey:@"signedInPersonId"]; // Return (if any) the Request object with given UUID RequestStrings *r = [[RequestStrings alloc] init]; NSEntityDescription *description = [NSEntityDescription entityForName:r.table_Request inManagedObjectContext:moc]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(UUID == %@) && (dataOwnerId == %@)", UUID, […]

iOS游戏大小问题

我开发了一个iOS Universal游戏,我想知道100MB是否意味着游戏与其他游戏相比是非常大的,我真的遇到了每个超过8MB的PNG图像的问题

调用委托方法,无法识别的select器,因为发送到错误的对象

在我的应用程序,我做了很多networking加载。 我的数据模型由“加载程序”对象组成,这些加载程序在完成/失败时调用它们的委托。 代表都符合“LoaderDelegate”协议。 我遇到的问题是,有时看似随机的对象,而不是委托,正在获取委托消息。 这当然会导致崩溃,因为无法识别的select器。 只有一套崩溃日志告诉我哪一个装载者有问题,其他人没有这个信息,只是那个得到消息的随机对象。 我被困在如何确定这个问题的真正原因。 一组崩溃日志有一个加载器试图调用它的委托,但达到_UIImageViewExtendedStorage 。 另外有一个loader正在到达__NSCFInputStream 。 另一个__NSBlockVariable__ 。 还有一个, CALayer 。 这只是我3天前的最新testing。 如果每次都是同一个对象,那将是一回事,但似乎是随机的。 内存是否有可能以某种方式被新对象覆盖? 我所有的加载器的委托属性是一个分配属性,但是当加载器完成时,委托总是处于活动状态(委托是我的视图控制器调用加载器)。

renderInContext税收应用程序内存

我正在2448 X 2448像素图像上运行此代码。 fullScaleView也是2448 X 2448( fullScreenView Rect:{{0, 0}, {2448, 2448}} )。 方法完成后,应用程序内存从49.7MB跳到240MB到172​​MB。 它保持在172MB。 在这个renderInContext之后,似乎应用程序仍然应该在如此高的内存空间下运行。 在哪里以及如何强制发布? (iOS 7 XCode 5 ARC)。 UIGraphicsBeginImageContextWithOptions(fullScaleView.bounds.size, fullScaleView.opaque, 1.0); [fullScaleView.layer renderInContext: UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();

在创build新的SCNNode之前移除SCNNode不释放内存

我正在构build一个应用程序,使用Scenekit来显示基于从数据库返回的信息的场景。 我创build了一个类func的自定义类创build一个SCNNode包含需要绘制的一切,并将其返回到我的SCNView。 在调用这个函数之前,我删除所有现有的节点 一切工作很好,直到我需要再次调用它。 删除旧的SCNNode之后在创build新内存之前,不会释放内存。 有没有一个标准的方式来删除和更换SCNNode,而不会超载内存? 我是iOS开发新手,从来没有真正完成graphics。 谢谢

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

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

一个iOS应用程序可以使用多less内存?

…当它在前台。 对于原始的iPad,256MB RAM,我发现我的应用程序可以使用高达100-140MB才被杀死。 现在情况如何? 我可以去买一堆iDevices,自己做一个testing,但我想检查:有没有人做过testing? 我知道这并没有一个确切的答案,而我正在寻找一个范围,例如:“在512MB设备上使用300-350MB的应用程序会被杀死,最多可以安全使用300MB”。 特别: 在具有512MB内存的设备上,一个应用程序可以使用多less? 在具有1GB内存的设备上,一个应用程序如何使用? 上面有没有区别? 为了保持less量的应用程序在后台,每个应用程序都被限制在一个固定数量的内存中,或者前台应用程序能够从内存中将所有后台应用程序踢出,并将整个1GB(或512MB)操作系统,当然)? 这个设备是iPad还是iPhone? 如果我的应用程序在512MB内存的iPad上工作,这是否意味着它也可以在512MB内存的iPhone上工作,反之亦然? 我知道UIViews和他们的Core Animation后备存储器会在iPad上占用更多的内存,因为屏幕尺寸较大,但除此之外,iPhone和iPad之间的内存情况是一样的吗? 我指的是进程使用的全部内存 – 堆,堆栈,静态数据,代码,Core Animation后台存储等。 如果你倾向于说它取决于操作系统版本,你可以假设我们正在谈论iOS 7。 我知道使用太多的内存意味着,当我的应用程序进入后台,iOS将终止更快。 我现在没有这个权衡。

SpriteKit SKTextureAtlas,由于加载纹理时的内存压力而终止

类似于WWDC的SpriteKit精选游戏“冒险”,我尝试通过拼贴加载我的背景图片。 我创build了一个包含6,300“瓦片”的纹理图集,每个瓦片的尺寸都是100×100像素。 完整的背景图像总共为30,000×2048(用于视网膜显示器)。 这个想法是,背景将从右侧移动到左侧(侧滚动)。 第一列和最后一列匹配,以便它们看起来连续。 当应用程序运行时,它将我的初始加载屏幕和标题图像加载到我的内存选项卡中的54MB ,CPU使用率为16% 。 这一直保持不变,我浏览菜单,直到我select我的关卡,它告诉后台线程加载关卡资产(其中包含前述的背景图片)。 整个.atlas文件夹显示只有35.4MB 。 我不相信这是一个问题,因为Adventure .atlas文件夹(来自WWDC)显示只有32.7MB 。 一旦我select了关卡,在我开始接收内存警告之前,它会在.atlas文件夹中加载大约20个纹理,并使应用程序崩溃。 我检查了仪器泄漏,并没有显示任何内存泄漏。 我没有收到任何编译器错误(甚至没有EXC_BAD_ACCESS之一)。 我查看过我的设备控制台,发现应用程序崩溃的地方有几行,但对我来说并不合适。 我也检查了僵尸,但似乎没有find任何。 CoreLevel.m dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ // Used to determine time spent to load NSDate *startDate = [NSDate date]; // Atlas to load SKTextureAtlas *tileAtlas = [SKTextureAtlas atlasNamed:@"Day"]; // Make sure the array is empty, before storing the […]

在滚动视图中释放多个视图控制器的内存

我有一个应用程序在滚动视图中加载了许多视图控制器取决于用户在桌面视图中的对象的数量。 所以当我在tableview和scroll view之间切换时,滚动视图中视图控制器的数量根据用户在tableview中有多less个对象而改变。 我使用Apple的PageControl示例代码中的代码,在经过一些修改之后,使用其中的许多视图控制器来构build滚动视图。 – (void)loadScrollViewWithPage:(int)page { if (page < 0) return; if (page >= kNumberOfPages) return; // replace the placeholder if necessary MainViewController *countdownController = [viewControllers objectAtIndex:page]; if ((NSNull *)countdownController == [NSNull null]) { id occasion = [eventsArray objectAtIndex:page]; countdownController = [[MainViewController alloc] initWithPageNumber:page]; [countdownController setOccasion:occasion]; [viewControllers replaceObjectAtIndex:page withObject:countdownController]; [countdownController release]; } // add […]

当popViewController调用时内存不释放

下面是我有一些疑惑的代码: MyController *vc= [MyViewController alloc] initWithNibName:@"myController" bundle:nil]; [self.navigationController pushViewController:vc animated:YES]; [vc release]; 然后,我通过按导航栏上的后退button来popup我的控制器。 问题是内存第一次增加5MB(在活动监视器)。当我popup控制器它不会被释放。 而当我做一次又一次的push和pop,内存增加了less量,也减less了。 UIView * myView = [UIView alloc] init]; self.vi = MyView的; [myView发布]; UIScrollView * mySv = [UIScrollView alloc] init]; self.sv = mySv; [mySvrelease]; UIProgressView * myPv = [UIProgressViewalloc] INIT]; self.pv = myPv; [myPvrelease]; UIWebView * myWv = [UIWebView alloc] init]; self.wv […]