- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
预先感谢您的宝贵时间!
适用于 iOS 7+ 应用程序的 Xcode 版本 5.1.1,启用了 ARC。
我正在研究在不使用 UINavigationController 或 UITabBarController 的情况下在多个 UIViewController 之间切换的最佳模式;最好是关于内存分配和释放。我远离导航和标签栏,因为它们使用自己的导航对象并占用屏幕上的空间。
为了测试我做了两个测试项目。有两个 UIViewControllers、两个 UIButtons 和两个 UILabels...
1) 使用通过按住 CTRL 键将 UIButton 拖动到下一个 UIViewController 并选择“模态”来设置的触发转场。作为返回,UIButton 的 Touch Up Inside IBAction 用于关闭第二个 UIViewController,即
- (IBAction)pressedButtonGoToTwo:(UIButton *)sender
{
[self dismissViewControllerAnimated:true completion:nil];
}
2) 使用这个 SO 帖子中描述的过渡 View Controller :Animate change of view controllers without using navigation controller stack, subviews or modal controllers? (感谢所有贡献者)。要转到第二个 UIViewController,使用 UIButton 的 Touch Up Inside IBAction,即
- (IBAction)pressedButtonGoToOne:(UIButton *)sender
{
UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
TBAViewController *vc2 = [mainStoryBoard instantiateViewControllerWithIdentifier:@"TBAViewController2"];
TBAAppDelegate *tbaAppDelegate = [UIApplication sharedApplication].delegate;
[tbaAppDelegate.transitionController transitionToViewController:vc2 withOptions:UIViewAnimationOptionTransitionFlipFromBottom];
}
返回,UIButton 的 Touch Up Inside IBAction 用于第二个 UIViewController,即
- (IBAction)pressedButtonGoToOne:(UIButton *)sender
{
UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
TBAViewController2 *vc1 = [mainStoryBoard instantiateViewControllerWithIdentifier:@"TBAViewController"];
TBAAppDelegate *tbaAppDelegate = [UIApplication sharedApplication].delegate;
[tbaAppDelegate.transitionController transitionToViewController:vc1 withOptions:UIViewAnimationOptionTransitionFlipFromBottom];
}
项目中定义了一个TransitionController UIViewController类型的类。
--
我知道有无数种方法可以做到这一点,例如展开 UIViewController。但这是我最熟悉的两种方式。
Instruments Allocations 分析用于使用实际的 iPhone 4(而非模拟器)制作以下内存分配和释放配置文件图。
1) 从第一个 UIViewController 到第二个 UIViewController 进行 12 次转换后,净变化为 11.96kB。
2) 在从第一个 UIViewController 到第二个 UIViewController 的 6 次转换之后,注意到净变化为 54.66kB(在发布时意识到只有 6 个,因为在切换到第二个 UIViewController 之后,为第一个 UIViewController 分配的内存被释放) .
--
我对这些图的解释是,这两种方法都工作得相当好,但是它们都不会导致净零内存分配变化。
(1) 表明第一个 UIViewController 始终被分配,第二个 UIViewController 被分配和解除。
(2) 显示为第一个或第二个 UIViewController 之间的每次转换分配过渡 UIViewController。然而,无论何时分配了过渡 UIViewController 都会被取消,即内存配置文件看起来像一个步骤,然后立即下降,而不是像 (1) 中那样,步骤一直持续到第二个 UIViewController 被取消。
测试是在实际的 iPhone 上进行的,因此绘图上未捕获内存警告。但是,在模拟器上,当触发内存警告时,会释放一些额外的内存,但它永远不会回到基线。
--
我的问题具体...
问题1)这些结果可以接受吗?
问题2)在现实世界中无法实现净零内存更改吗?如果是这样,那么对于每个 UIViewController 有大量对象的实际应用程序来说,可接受的内存泄漏量是多少? 100kB、200kB...?
Q3)我应该使用什么设计模式?还有其他人吗?效率更高?
再次感谢大家。
最佳答案
一个有趣的问题。以下是一些想法:
1) 看起来您正在使用 Storyboard。 Storyboard是 iOS 生态系统中的怪兽。它们类似于 nib,但似乎具有超出常规的额外缓存逻辑。我会尝试在不使用 Storyboard 的情况下重现您的结果,看看您会得到什么。
2) 带有转换 Controller 的第二个版本会占用更多内存,因为您现在有一个额外的 View Controller 在运行,而不是原来的两个,所以这将占用额外的内存。
总的来说,随着操作系统构建其缓存以及运行时为您缓存内容,应用程序中的内存会增加一些。根据应用程序的大小,您可能有 50k 或 5000k 的内存增长。在这种特殊情况下,我认为 15-30k 的增长是可以接受的。
关于ios - 内存堆积,在ViewController之间切换,什么是ok的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25734816/
我正在尝试创建一个简单的小部件,它只有一个切换按钮,但我的 AVD 模拟器上不断出现错误,提示“加载小部件有问题”。 似乎是因为我在小部件布局中添加了开关或切换按钮。 为了测试它,我创建了一个新的空
我正在使用 GLFW 进行键盘输入,但处理速度太快,因此我的 bool 开关在一次按下时被更改了 10 次,因为输入是每一帧处理的。我只需要按一次空格键即可切换状态。我当前的代码如下: if (glf
我希望完成一个相当简单的任务(我希望!) 我有两个 div 标签和一个 anchor 标签,像这样: forgot password? 我希望使用 anchor 标记在两个 div 标记之间切换,
我已经尝试了几种不同的方法,但似乎无法弄清楚如何将 span 的类从“die2”切换到“die3”以及将 div 的显示样式从“block”切换到“none”。有人有任何解决方案吗? (基本上当页面加
我正在尝试制作一个交换小部件,该小部件显示两个不同的文本。激活时,它下面显示一个TextField,顶部是不可见的,而禁用时它上面显示一个Text,而底部是不可见。但是它没有在屏幕上显示任何内容,只是
我有一个简单的 Angular 应用程序,它使用两个模板和 Controller 。放置两个按钮来切换 View 。它们调用在控件内定义的函数,该函数使用 window.location='' 来切换
我想要一个 div 切换它的类(切换)onclick,然后再次恢复到原来的类 onclick 我的代码是: function myfunc() { //the code over here
我确信这是一个常见问题,我已经尝试了该网站上的许多线程来尝试解决我的问题,但我似乎无法使其正常工作。基本上我有一个子菜单,当父菜单悬停在其上时需要显示该子菜单,但是如果您在加载完成之前将鼠标从菜单项上
我制作了一个 JavaScript 函数来隐藏单击按钮时的链接及其在该函数中的工作 function toggle() { var ele = document.getElement
我正在使用我在 JS fiddle 上找到的这个脚本:http://jsfiddle.net/Q4PUw/2/ 当我点击切换链接时,它会切换框并显示它,但是,它会跳回页面顶部,然后我必须再次向下滚动才
我正在 GoDaddy 上的共享服务器 IP 上构建 Web 应用程序。该应用程序与验证请求服务器 IP 的房地产 API 进行对话。问题是在 GoDaddy 上,我们的 IP 被列为 X,但它实际上
我在 jquery 中有一个简单的脚本,可以在 时切换 div(显示和隐藏)。被点击(我正在使用 Bootstrap )。 HTML: Advanced search This is t
我有两个 NSWindows,其中都有一个 NSPanel。我想在按下按钮时切换窗口。如何才能做到这一点?我不再需要旧窗口,所以我只想显示新窗口。 最佳答案 要聚焦第二个窗口,只需调用: [windo
我尝试在单击切换时将选项添加到选择菜单,但如果再次单击(取消选择),则可以将其删除。到目前为止,我可以在单击时向选择菜单添加单个值,但无法将其删除(切换添加切换删除) 这是我的代码: HTML
我正在尝试隐藏所属行。例如,如果您单击“子标题 1”,则将仅隐藏项目 1、项目 2 和项目 3 行。 示例: title Sub Title 1
似乎无法让它为我工作,任何人都可以为我提供帮助吗? http://codepen.io/anon/pen/kABjC 这应该根据点击打开和关闭文本部分,它采用 ID #,它只是一个数字(1,2,3,4
我正在从一个文件复制到另一个文件,并且我可以看到 Excel 在源文件和目标文件之间切换(如闪烁)。我希望宏从源复制并粘贴到目标,而不在文件之间切换(我不想闪烁)。 这里我得到了我的 Excel VB
我正在尝试制作一个带切换功能的 Accordion ,现在看起来效果很好。作为 javascript 的新手,我希望得到一些帮助,那就是它的组合方式。 http://jsfiddle.net/z3wW
我正在尝试制作一个小脚本,其中屏幕将每 100 毫秒随机更改一次背景颜色,您可以通过按一个按钮来打开和关闭它。我可以让它开始,但我不能让它停止。 这是切换的主要代码: var on = -1; fun
我确信这里应该已经涵盖了这一点,但我一直无法找到专门涉及此问题的问题。 我在一个页面中有 2 个 div,就像这样...... ...content... ...content...
我是一名优秀的程序员,十分优秀!