我正在使用故事板。我只需要初始化一次UIViewController的实例变量。每次我从菜单打开一个viewController时都会激活viewDidLoad
和awakeFromNib
(我在Facebook应用程序中使用SWRevealViewController作为侧边栏菜单)。 awakeFromNib多次触发是正常的还是SWRevealViewController错误?
是否有一些特殊的init方法或者我是否需要从viewController外部设置实例变量(在AppDelegate中?)
修改:
我发现了这个问题 SWRevealViewControllerSegue, reusing Viewcontrollers 我没有意识到每次通过segue显示控制器时,它都会创建一个新的控制器实例。那是什么意思呢?这是否意味着如果我有一个从Web API加载的数据表 - 每次我来回穿过segue时都会重新加载?对我来说似乎不是很有效。 iOS是正常的吗?
答案 0 :(得分:2)
根据情况重新创建或重复使用视图控制器。当您将视图控制器推送到导航控制器的堆栈时,您几乎总是推送一个新实例。使用标签栏控制器时,它包含的视图控制器通常保存在内存中。为了避免过多的内存消耗,在可能的情况下清理视图控制器是有意义的,而不是保持在周围。
如果是SWRevealViewController
,那么听起来好像每次都要重新创建视图控制器 。理想情况下,您不应直接从视图控制器中的Web API加载任何数据;相反,将您的API调用和模型提取到可以从任何视图控制器重用的单独类中。然后,您不必在视图控制器加载时通过网络重新加载数据,而只需从模型/商店类中获取最新数据。