От: http://www.galloway.me.uk/tutorials/singleton-classes/
Одиночки в Objective-C
Один из моих наиболее часто используемых шаблонов проектирования при разработке для iOS - этосинглтонЭто чрезвычайно эффективный способ обмена данными между различными частями кода без необходимости передавать данные вручную.
Фон
Синглтон-классы - это важная концепция, которую нужно понимать, потому чтоони демонстрируют чрезвычайно полезную модель дизайна.Эта идея используется в iPhone SDK, например, в UIApplication есть метод sharedApplication, который при вызове из любого места возвращает экземпляр UIApplication, относящийся к текущему приложению.
Как реализовать
Singletone.h
#import <foundation/Foundation.h>
@interface Singleton : NSObject {
}
@property (nonatomic, retain) NSString *someProperty;
+ (id)sharedManager;
@end
Singleton.m
#import "Singleton.h"
@implementation Singleton
@synthesize someProperty;
#pragma mark Singleton Methods
+ (id)sharedManager {
static Singleton *sharedMyManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedMyManager = [[self alloc] init];
});
return sharedMyManager;
}
- (id)init {
if (self = [super init]) {
someProperty = [[NSString alloc] initWithString:@"Default Property Value"];
}
return self;
}
@end
Что это делает, это определяетстатическая переменная (но только глобальная для этого модуля перевода)) с именем sharedMyManager , которая затем инициализируется один раз и только один раз в sharedManager .Мы гарантируем, что он будет создан только один раз, используя метод dispatch_once из Grand Central Dispatch (GCD) .Это поточно-ориентированный и полностью обрабатывается операционной системой для вас, так что вам не нужно об этом беспокоиться.