2011-04-08 3 views
6

Эй, ребята, я хочу спросить, что такое sharedInstance? Я имею в виду, что такое использование?Вопрос относительно SharedInstance

В настоящее время у меня возникла проблема с общением между двумя разными файлами.

Вот мой вопрос: У меня есть один файл вызов Ah/Am и другой файл вызов Bh/Bm Ах должны получить доступ к некоторым данным в Bh, так .... есть ли возможный способ, которым я мог бы достичь того, что Я хочу? Просто удивительно, что это «SharedInstance», способное решить мою проблему?

В поисках ответа :)

ответ

11

sharedInstance может быть использован для нескольких способов.

Например, вы можете получить доступ к объекту из статического контекста. На самом деле он используется большинством способов поддержки шаблона Singleton. Это означает, что только один объект класса используется во всем программном коде, всего один экземпляр вообще.

Интерфейс может выглядеть следующим образом:

@interface ARViewController 
{ 
} 
@property (nonatomic, retain) NSString *ARName; 

+ (ARViewController *) sharedInstance; 

Реализация ARViewController:

@implementation ARViewController 
static id _instance 
@synthesize ARName; 
... 
- (id) init 
{ 
    if (_instance == nil) 
    { 
     _instance = [[super allocWithZone:nil] init]; 
    } 
    return _instance; 
} 

+ (ARViewController *) sharedInstance 
{ 
    if (!_instance) 
    { 
     return [[ARViewController alloc] init]; 
    } 
    return _instance; 
} 

И получить к нему доступ, используйте следующее в классе CustomARFunction:

#import "ARViewController.h" 

@implementation CustomARFunction.m 

- (void) yourMethod 
{ 
    [ARViewController sharedInstance].ARName = @"New Name"; 
} 
+0

Я не понимаю :( – Birdkingz

+0

Ну, пожалуйста, предоставьте нам некоторую более подробную информацию, где проблема лежит и то, что вы точно не понимаете :) – Lepidopteron

+0

Хорошо, у меня есть 2 файла - ARViewController. ч/м. - CustomARFunction .h /.m Внутри ARViewController.h у меня есть одно имя переменной строки ARName. Что я хочу на самом деле внутри CustomARFunction.m, мне нужно обратиться к ARName в ARViewController.h и внести на него некоторые изменения. Значит, если я изменил ARName с помощью CustomARFunction.m, ARName в ARViewController также изменится. – Birdkingz

3

sharedInstance часто реализуется с singleton pattern. Как в [UIApplication sharedApplication] -> Есть только одно приложение, к которому вы обращаетесь через этот синглтон.

Идея состоит в том, чтобы иметь один экземпляр класса, к которому можно получить доступ, вызывая метод класса, в объектно-c обычно называемом sharedXXX.

Чтобы решить вашу проблему, вы можете реально реализовать одноэлементный класс модели, а также дату записи и доступа к одному существующему экземпляру, к которому можно получить доступ со статическим методом, назовем его sharedModel.

Следующим шагом для улучшения вашей модели и обновления представлений будет KVO: наблюдение за ключевыми значениями. Вы добавляете наблюдателя в свой viewController, чтобы «наблюдать» изменения, внесенные в вашу модель. Если такое изменение происходит, ваш viewController информируется, и вы можете обновить его.

Вы можете узнать больше о KVO в Apple's documentation или более за mindsizzlers для небольшого и легкого урока.

1

Интерфейс

@interface CouponSynchronizer : NSObject 

+ (CouponSynchronizer *) sharedSynchronizer; 

@end 

Реализация

@implementation CouponSynchronizer 

static CouponSynchronizer *sharedSynchronizer = nil; 

+ (CouponSynchronizer *)sharedSynchronizer 
{ 
    @synchronized(self) { 
     if (sharedSynchronizer == nil) { 
      sharedSynchronizer = [[self alloc] init]; 
     } 
    } 
    return sharedSynchronizer; 
} 

@end 
7

Shared Instance это процесс, с помощью которого вы можете получить доступ к экземпляру класса или объекта класса в любом месте проекта. Основная идея заключается в том, чтобы возвращать один и тот же объект каждый раз при вызове метода, чтобы значения/свойства, хранящиеся в экземпляре, можно было использовать в любом месте приложения.

Это может быть сделано в 2 простой процесс следующим образом: -

1) Использование статической переменной инициализируется только один раз

@implementation SharedInstanceClass 

static SharedInstanceClass *sharedInstance = nil; 

+ (id)sharedInstanceMethod 
{ 
    @synchronized(self) { 
     if (sharedInstance == nil) { 
      sharedInstance = [SharedInstanceClass new]; 
     } 
    } 
    return sharedInstance; 
} 

@end 

2) Использование НОД-х: -

+ (id)sharedInstance{ 
    static dispatch_once_t onceToken; 
    static SharedInstanceClass *sharedInstance = nil; 
    dispatch_once(&onceToken, ^{ 
     sharedInstance = [SharedInstanceClass new]; 
    }); 
    return sharedInstance; 
} 

Эти следует назвать: -

SharedInstanceClass *instance = [SharedInstanceClass sharedInstance]; 

Таким образом, каждый раз один и тот же экземпляр будет возвращен из функции, а значения, установленные для свойств, будут сохранены и могут использоваться в любом месте приложения.

С уважением,

Смежные вопросы