在iOS简单通讯录的教程中,从登录界面到通讯录联系人界面的数据顺传部分的方法如下,根据不同的登录用户名,变换通讯录联系人界面的标题:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
UIViewController *vc = segue.destinationViewController;
vc.title = [NSString stringWithFormat:@"%@的联系人列表",_accountField.text];
}
我的理解是:这个方法新建了一个UIViewController
类的对象vc
,并把segue
的destinationViewController
赋值给了vc
,然后改变了vc
对象的title
,最后也没有返回vc
,和destinationViewController
的title
应该没有关系啊?为什么这样写是正确的呢?
Cette méthode crée un nouvel objet vc de la classe UIViewController
Il n'y a aucune opération pour créer un nouveau VC ici, il n'y a pas d'allocation de mémoire.
Ce code est exactement le même que celui ci-dessous
Bien sûr, il n'est pas nécessaire de revenir.
Si vous n'utilisez pas segue pour générer un vc à partir de sb, c'est probablement comme ça
Lorsque Segue appelle destinationViewController, il fait en fait la même chose. Il génère un vc à partir de sb et vous le renvoie
Ce vc est le même que celui que vous avez généré vous-même
{
}
VC n'est pas nouvellement créé, c'est juste un pointeur vers le contrôleur de vue cible, qui est le contrôleur de vue à sauter
(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender Cette méthode est appelée lors du changement d'interface. À ce stade, segue contient déjà l'interface à laquelle vous souhaitez accéder, pas Created. à ce moment. Le storyboard créera l'objet viewController souhaité et le donnera à la séquence.
UIViewController *vc = segue.destinationViewController;
vc.title = [NSString stringWithFormat:@"%@'s contact list",_accountField.text];
Ces deux lignes de code sont les objectifs de votre segue VC a été supprimé et son titre a été modifié.
Le point clé est de comprendre que le VC cible vers lequel vous allez est construit par storybard, pas quelque chose que vous créez puis retournez.