ObjectContainer.h
Kod:
#import <Foundation/Foundation.h>
@interface ObjectContainer : NSObject {
NSMutableDictionary *dictionary;
}
+ (void)initialize;
+ (ObjectContainer*) getInstance;
- (id) valueForKey:(NSString*) key;
- (void) setValue:(id) value forKey:(NSString* ) key;
@end
ObjectContainer.m
Kod:
#import "ObjectContainer.h"
@implementation ObjectContainer
static ObjectContainer *objectContainer;
+ (void)initialize{
static BOOL initialized = NO;
if(!initialized){
initialized = YES;
objectContainer = [[ObjectContainer alloc] init];
}
}
- (id)init{
self = [super init];
if (self) {
dictionary = [[NSMutableDictionary alloc] init];
}
return self;
}
+ (ObjectContainer*) getInstance{
return objectContainer;
}
- (id) valueForKey:(NSString*) key{
return [dictionary valueForKey:key];
}
- (void) setValue:(id) value forKey:(NSString* ) key{
[dictionary setValue:value forKey:key];
// NSLog(@"ustawilem: %@", [dictionary valueForKey:key]);
}
- (void)dealloc{
[dictionary release];
[objectContainer release];
[super dealloc];
}
@end
Wyczytałem, że metoda initialize jest wywoływana tylko raz przy tworzeniu obiektu, więc być może nie ma potrzeby, aby ObjectContainer był statyczny, ale ta wersja działa na 100% a jak to pisałem to nie miałem czasu się bawić 
Wywołania z dowolnego pliku:
Kod:
#import "ObjectContainer.h"
[[ObjectContainer getInstance] setValue:@"Ala to ładna dziewczynka" forKey:@"ala"]; //ustawienie wartości
NSString *tmp = [[ObjectContainer getInstance] valueForKey:@"ala"]; //odczytanie wartości
Zaleta jest taka że możemy z każdego pliku wstawić dowolną referencję i odczytać w dowolnym innym miejscu, wadą jest to, że musimy ogarnąć co mamy pod jakim stringiem.