IOS uiviewcontroller:如果将rootviewcontroller设置为新的viewcontroller,viewcontroller是否可用
我有两个UIViewController:loginViewController和MainViewController 我的应用程序逻辑如下:IOS uiviewcontroller:如果将rootviewcontroller设置为新的viewcontroller,viewcontroller是否可用,ios,objective-c,iphone,uiviewcontroller,modal-dialog,Ios,Objective C,Iphone,Uiviewcontroller,Modal Dialog,我有两个UIViewController:loginViewController和MainViewController 我的应用程序逻辑如下: 在didFinishLaunchingWithOptions中,我检查用户是否已登录。 如果是,则转到MainViewController。 如果没有,我转到loginViewController让他登录,然后转到MainViewController 当用户在MainViewController中时,他可以注销。当他注销时,他将转到LoginView控制
-Lee回答您的第一个问题“当我将rootViewController设置为新创建的loginViewController时,它们是否会在某个时候被释放,或者始终保留在内存中” 他们将被释放(除非他们被你的帖子中没有提到的东西保留)。如果
loginViewContorller
是窗口的rootviewcontorller,并且在其上显示了mainviewcontorler
,那么如果您创建一个新的loginViewContorller
并用它替换窗口的rootviewcontorler,那么旧的loginViewContorller
和mainviewcontorler
将被释放
回答第二个问题。
别担心。如果在任何时候用新的视图控制器替换窗口的rootViewController,则UI将立即切换到新创建的视图控制器,所有其他视图控制器都将被释放
把它想象成一棵树。窗口的rootViewController是主干。所有其他视图控制器都从它分支。因此,如果使用新的视图控制器替换rootViewController,则整个层次结构将再次被释放,前提是没有其他对象保留对任何视图控制器的强引用。谢谢回答。但是它们由presentedViewController和PresentingViewController相互指向。这两个属性并不弱。那他们为什么会被释放呢?@user1165560事实上你是对的!“显示视图控制器”似乎与“显示视图控制器”有很强的交叉引用,这让我感到惊讶。我已经对此进行了研究,并提出视图控制器的行为是不直观的,在我看来是有缺陷的。你可能想看看我准备的这三个例子,谢谢你的例子。这是否意味着我应该在登录后使用push而不是present,因为loginView不会关闭mainView。也许使用演示是错误的…@user1165560很难说。我尽量避免情态动词,因为它不是第一次给我带来问题。在UINavigationController中管理ViewController堆栈非常简单。另一方面,presentViewController:API的存在是有原因的,在某些情况下,我们几乎被迫使用它。但是如果我有什么建议的话,如果可以的话,就用
UINavigationController
。明白了。在这种情况下,我应该使用push-for。现在我明白了什么时候多用情态动词:-)