[英]Alloc and init the destinationViewController
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@“DoSomething”]) {
if ([segue.destinationViewController isKindOfClass:[DoSomethingVC class]]) {
DoSomethingVC *doVC = (DoSomethingVC *)segue.destinationViewController;
doVC.neededInfo = ...; }
}
}
在上面的代碼中,我不明白為什么需要局部變量doVC。
如果您的destinationViewController已經存在於堆中,為什么不能像這樣將數據傳遞給它
seque.destinationViewController.neededInfo =...
如果堆中不存在它,您是否應該分配和初始化它? 這行代碼基本上是在做什么嗎?
DoSomethingVC *doVC = (DoSomethingVC *)segue.destinationViewController;
您正在分配和實例化DoSomethingVC類的實例嗎? 如果是這樣,我不理解該局部變量是如何保持活動的,因為它是局部的。 一旦定單完成,sourceVC也將死亡。
我只是不明白編譯器是如何處理此過程背后的內存並將數據從該局部變量同步到destinationViewController的。
segue.destinationViewController
的類型為UIViewController
(即使它實際上是DoSomethingVC
,它具有UIViewController
的基本類型),因此它不會知道您的變量neededInfo
,這就是為什么需要將其DoDomethingVC
為DoDomethingVC
。
它使segue.destinationViewController
作為UIViewController
類型是通用的,因為它在編譯時無法真正知道此destinationViewController
是什么。
直覺你對繼承的了解有點不穩定(不是要刻薄),但是可以類推,如果UIViewController
的類型是Bird
而DoSomethingVC
的類型是Duck
,則prepareForSegue:
方法知道Bird
將是destinationViewController。 ,但目前還不知道它是Duck
還是其他鳥,因此您必須明確告訴它是什么鳥(如果弄錯了,它會做壞事或崩潰),而且框架也不知道有哪種鳥(因為您是在制造它們),因此無法為您考慮它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.