使用 Segues 感受糟糕的设计布局

Posted

技术标签:

【中文标题】使用 Segues 感受糟糕的设计布局【英文标题】:Feeling A Bad Design Layout Using Segues 【发布时间】:2013-05-07 01:57:49 【问题描述】:

所以我正在使用我的第一个 iPhone 应用程序。我其实很深入。我已经从许多错误中吸取了教训,但我觉得我犯了一个终极错误。我正在使用 segues 导航到不同的视图。我深入了解了大约 5 个 segue 视图,我意识到这会导致大量分配的内存。换句话说,视图 A 调用视图 B,B 进入 C,C 进入 D,等等。据我了解,当我到达 D 时,我现在打开了 A B C 和 D 的实例,这听起来不太好。例如,我正在使用代表,如下所示:

只是我在整个应用程序中所做的一个示例:

第一个视图:

@interface FirstViewController : UIViewController<SecondViewControllerDelegate>

@end

第二个视图:

@class SecondViewController;

@protocol SecondReviewOrderViewControllerDelegate <NSObject>

 - (void)secondViewControllerDidCancel:(SecondViewController *)controller;

@end

@interface SecondViewController : UIViewController<ThirdViewControllerDelegate>
  @property (strong, nonatomic) id <SecondViewControllerDelegate> delegate;
@end

第三视图:

@class ThirdViewController;

@protocol ThirdReviewOrderViewControllerDelegate <NSObject>

 - (void)thirdViewControllerDidCancel:(ThirdViewController *)controller;

@end

@interface ThirdViewController : UIViewController<>
  @property (strong, nonatomic) id <ThirdViewControllerDelegate> delegate;
@end

依此类推到视图 4 和 5。

我的问题是,如果这似乎是错误的,那么导航视图并将数据从一个视图控制器传递到另一个视图控制器的正确方法是什么?感谢您的任何提示。

【问题讨论】:

通常一些视图控制器实例不会是内存问题,但这非常依赖于应用程序。你真的对视图控制器实例的内存有问题吗?您是否在 Allocations 中运行您的应用程序并发现内存压力问题?或者这只是过早的优化? 我已经运行了 xcode 工具,并看到相当高的分配进入深度 segue。另外我不使用 NavigationControllers,我只使用 ViewControllers 基本上,我正在将视频上传到视图 D 中的服务器,并且我遇到了一些随机上传问题,上传只是停止和挂起,并且没有报告错误或超时。我想知道所有这些分配的内存是否与它有关。 我认为你在找众所周知的错误树,@TMan - 上传停止听起来像是网络问题,而不是内存问题。如果您有内存问题,您会知道:您会收到内存警告(在设备上 - 请务必在设备上进行测试)。 顺便说一句,这听起来像是一个令人印象深刻的第一款 iPhone 应用程序!我的第一个 iPhone 应用程序除了唱“墙上的 99 瓶啤酒”之外什么也没做(现在仍然如此)。 【参考方案1】:

据我了解,当我到达 D 时,我现在打开了 A B C 和 D 的实例,这听起来不太好

视图控制器本身是一个相当轻量级的对象,无论多层次深入都没有问题(例如,将五个视图控制器推入导航控制器堆栈)。但是,您可能持有的内存和图像并不是轻量级的,因此请务必实现didReceiveMemoryWarning,并在收到时认真对待。

响应didReceiveMemoryWarning 放弃大量保留内存占用的东西的策略是将其保存到磁盘(如果不能按需重新创建),然后使用延迟初始化将其读回下次你被要求时。

【讨论】:

正确,完全正确。我确实将视频存储在临时目录中,这是所有分配的来源。我一直收到内存警告,但是我该如何处理呢? 临时目录中的磁盘存储不会给你一个内存警告。内存警告是关于您保留在实例变量中的内容。如果你收到警告,那就是你需要放手的东西。 当然,我在这里假设您正在使用 ARC,因此您几乎不可能管理不善内存(即泄漏)。 在我的仪器上,对于所有分配:实时字节:5.38MB,总字节:22.16MB,这听起来正常吗? 在上传过程中,它会达到 10MB 左右。好吧,你肯定让我对我的应用程序的这一部分感觉更好。谢谢你的帮助。不过,我确信 Apple 会发现它有问题。

以上是关于使用 Segues 感受糟糕的设计布局的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 不滚动自动布局问题

“呈现为弹出框”segues 和视图大小

iOS 7 XCode 5 故事板布局示例

移动端布局基础viewport

iOS自动布局——Masonry详解

使用自动布局 Xcode 居中