我是 iOS 开发新手。我看过很多关于以编程方式控制内存管理的文档,但是我很好奇 iOS 在之间导航时处理内存的默认方式:
(注意:当我说主从 View 时,我基本上指的是导航 Controller 。我只是称它为“主从 View ”来定义导航 Controller 层次结构的两个不同级别,所以它我们更容易讨论)
我将带着我的问题逐一讨论这 3 个主题:
标签
Master-Detail View (如果 Master 是一个 UITableViewController,而 Detail 只是一个 UIViewController,并且它们嵌入在 Navigation Controller 中)
带选项卡的主从 View (在主视图是 UITableViewController 的情况下,细节只是一个 UIViewController 并且它们嵌入在导航 Controller 中)
所有这些问题都指的是 iOS 的默认行为。
最佳答案
几个想法:
诊断:诊断正在发生的事情的最简单方法是向您的 subview Controller 添加日志记录语句。例如,如果您将以下行添加到 viewDidLoad 和 dealloc 方法,您将作为 Controller 收到通知并加载和释放:
NSLog(@"%s", __FUNCTION__);
然后,配备会在实例化和释放时记录日志的 View Controller ,您可以在容器 Controller (选项卡栏 Controller 、导航 Controller 、 Split View Controller 等)的任意组合中使用这些 Controller ,您可以轻松地看到你自己怎么了。
关于您询问的具体容器 Controller :
标签栏 Controller :在 Storyboard 中,标签栏 Controller 会在您选择相应标签时(而不是之前)分配子 Controller ,但会保留旧标签。 (在 NIB 中,这仅取决于您以编程方式执行的操作;您可以预加载或不预加载它们。)
导航 Controller :导航 Controller 会在您推送到特定场景时加载新的子 Controller ,但它不会在该过程中释放之前的 View Controller 。只有当您从导航堆栈中弹出一个 View Controller 时,该 Controller 才会被释放。
Split view controller: 当您在 split view controller 中执行 replace segue 时,它将实例化新的子场景,并释放之前的子 Controller 。如果之前的子 Controller 本身是一个容器 Controller ,例如选项卡或导航 Controller ,那么它的子 Controller 也将被释放。
关于ios - iOS 什么时候分配内存和释放内存? (关于导航和选项卡 Controller 的默认行为),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17621067/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
通过rubykoans.com,我在about_array_assignment.rb中遇到了这两段代码你怎么知道第一个是非并行赋值,第二个是一个变量的并行赋值?在我看来,除了命名差异之外,代码几乎完全相同。4deftest_non_parallel_assignment5names=["John","Smith"]6assert_equal["John","Smith"],names7end45deftest_parallel_assignment_with_one_variable46first_name,=["John","Smith"]47assert_equal'John