Вот несколько способов, которыми вы можете попробовать
Использование appdelegate
appdelegate также является разновидностью одноэлементного класса
Определение функции:
-(NSString*)ReadAppDelegateInstanceVariable:(NSString*)InstVar
{
AppDelegate *appDel=(AppDelegate *)[UIApplication sharedApplication].delegate;
return [appDel valueForKey:InstVar];
}
Вызов функции:
[self ReadAppDelegateInstanceVariable:@"someInstanceVariableName"];
Использование собственного одноэлементного класса
Может существовать только один экземпляр класса.
Пример объявления синглтона:
@interface SigletonClass : NSObject
{
//declare instance variable
}
+ (id)sharedSingletonClass;
@end
Пример реализации синглтона:
Подход 1: Использование GCD
@implementation SigletonClass
+ (id)sharedSingletonClass {
static SigletonClass *sharedClass = nil;
static dispatch_once_t onceToken;//The way we ensure that it’s only created once is by using the dispatch_once method from Grand Central Dispatch (GCD).
dispatch_once(&onceToken, ^{
sharedClass = [[self alloc] init];
});
return sharedClass;
}
- (id)init {
if (self = [super init]) {
//init instance variable
}
return self;
}
@end
Подход 2: Без использования GCD
@implementation SigletonClass
+ (id)sharedSingletonClass {
static SigletonClass *sharedClass = nil;
@synchronized(self) {//To safeguard threading issues
if (sharedClass == nil)
sharedClass = [[self alloc] init];
}
return sharedClass;
}
- (id)init {
if (self = [super init]) {
//init instance variable
}
return self;
}
@end
Определение функции:
-(NSString*)ReadSingleTonInstanceVariable:(NSString*)InstVar
{
SigletonClass sObj=[SigletonClass sharedSingletonClass];
return [sObj valueForKey:InstVar];
}
ФункцияЗвонок:
[self ReadSingleTonInstanceVariable:@"SomeInstanceVariableName"];
NSString to int:
-(int)ConvertToIntFromString:(NSString*)str
{
return str.intValue;
}
Насколько я знаю, с этим не возникает проблем с производительностьюнад другим.
Я всегда предпочитаю синглтон-класс , а не appdelegate , потому что код не будет загроможден, и я считаю чрезмерным использование appdelegate как вонючий код .