在做iOS app项目的时候,页面之间的跳转最长用的两种方式,一个是push,一个是present,今天才发现原来两种方式的实现机制是不一样的,举个简单例子,有两个页面A和B,如果是push的话,应该是A push -> B,然后B pop -> A,然而present、dismiss最标准的用法却不是这样的,下面看一下官网给出的一段话
The presenting view controller is responsible for dismissing the view controller it presented. If you call this method on the presented view controller itself, it automatically forwards the message to the presenting view controller.
意思就是说A present 出B,A应该负责 dismiss B。如果在B里执行dismiss方法,会把消息传递到A,从而实现dismiss B。
虽然说在一般情况下B里dismiss同样可以达到目的,但是如果在B页面又present出一个页面C,这时候在B页面dismiss,其实是dismiss的C,这种情况就达不到dismissB的效果。
所以为了防止这种情况的发生,最好还是谁present出来的谁负责dismiss。