Это очень подвержено ошибкам, что вы делаете здесь.
ViewController *vc;
объявляет указатель, но это не будет инициализировано;поэтому, когда вы обращаетесь к его свойству vc.label.text, objc_messageSend () будет передан фиктивный указатель, поэтому он может потенциально потерпеть крах!(вам повезло, если id не сделал этого.)
В любом случае: если вы сделали это хорошо, как ViewController *vc = [[ViewController alloc] init];
, создание нового экземпляра не затронуло бы другой экземпляр.Вы должны где-то хранить указатель на ваш экземпляр, например, установить @property (retain) ViewContrller *vc;
для объекта делегата приложения вашего приложения и обращаться к нему через это свойство следующим образом:
[(MyAppDelegate *)[[UIApplication sharedApplication] delegate] vc].label.text = @"new text";
таким образом, как оно должно работать.
Надеюсь, это поможет.