所以我在我的第一个iPhone应用程序上。我实际上相当远。我已经从许多错误中吸取了教训,但我觉得我犯了一个错误。我正在使用segues导航到不同的视图。我深入了解了5个segue视图,我意识到这会导致大量分配的内存。换句话说,View A调用View 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视图。
我的问题是,如果这是错误的,它似乎是什么,导航视图和将数据从一个视图控制器传递到另一个视图控制器的正确方法是什么?感谢您的任何提示。
答案 0 :(得分:4)
根据我的理解,当我到达D时,我现在有A B C和D打开的实例,这听起来不太好
一个视图控制器本身就是一个相当轻量级的对象,并且没有任何问题,无论是多层深度(例如将五个视图控制器推到导航控制器堆栈上)。但是,您可能持有的内存和图像不是轻量级的,因此请务必实施didReceiveMemoryWarning
并在其到达时认真对待。
为响应didReceiveMemoryWarning
而放弃大量保留内存占用内容的策略是将其保存到磁盘(如果无法按需重新创建),然后使用延迟初始化将其读回在下次你被要求的时候。