Storing global constants in app delegate or singleton
Storing everything in a global singleton can be problematic, I wouldn't recommend that. 

I worked on a project once where all data ever passed to view controllers from outside was stored a giant singleton class with a lot of properties. Essentially these properties were just global variables. 

All this led to bugs where some view controller changed a variable at a wrong point in time and another view controller didn't expect that. If you ask anybody on the internet, they are probably going to say that singletons are bad. And in most situations they are, especially like this one.

So instead of using a singleton I would recommend passing parameters to view controllers somehow before you show them. It can be a as simple as setting a property:

@interface ViewController : UIViewController

@property (nonatomic) NSString *someParameter;

@end

@implementation ViewController

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    // Update your UI based on someParameter. For example:
    self.myAwesomeLabel.text = someParameter;
}

@end


If ViewController presents another view controller that happens to need someParameter too, what previously used to be a simple access to your singleton property now has to be replaced with code that will explicitly pass someParameter to the presented view controller like so:

AnotherViewController *vc = [[AnotherViewController alloc] init];
vc.someProperty = self.someProperty;
vc.anotherProperty = @"Another property";
[self presentViewController:vc animated:YES completion:nil];


I think this is called property injection (a kind of dependency injection). There is also constructor (initializer) injection:

@interface ViewController : UIViewController

@property (nonatomic, readonly) NSString *someProperty;

- (instancetype)initWithSomeProperty:(NSString *)someProperty;

@end

@implementation ViewController

- (instancetype)initWithSomeProperty:(NSString *)someProperty {
    if (self = [super initWithNibName:nil bundle:nil]) {
        _someProperty = someProperty;
    }
    return self;
}

@end


There is also a great article on objc.io about this stuff.