:当你在代码中创建视图控制器时,你可以创建自定义的init方法,例如initWithCustomer:。这样,你可以使你的视图控制器内部的customer是不可变的,并确保这个视图控制器不能在没有customer对象的情况下被创建。这在使用故事板时是不可能的。你将不得不等待prepareForSegue:sender:方法被调用,然后你将不得不在你的视图控制器上设置customer属性,这意味着你必须使这个属性是可变的,你将不得不允许在没有customer对象的情况下创建视图控制器。根据我的经验,这可能会极大地复杂化你的代码,使其难以推理你的应用程序的流程。Update 9/9/16: Chris Dzombak写了一篇关于这个问题的伟大文章。