Вопрос относительно SharedInstance - PullRequest
6 голосов
/ 08 апреля 2011

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

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

Вот мой вопрос: У меня есть 1 вызов файла A.h / A.m и другой вызов файла B.h / B.m A.h нужно получить доступ к некоторым данным в B.h, так что ... есть ли какой-нибудь возможный способ добиться того, чего я хочу? Просто интересно, может ли "SharedInstance" решить мою проблему?

Ищу ответ:)

Ответы [ 4 ]

10 голосов
/ 08 апреля 2011

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

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

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

@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";
}
7 голосов
/ 09 апреля 2014

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

Это можно сделать в 2 простых процесса:следует: -

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

@implementation SharedInstanceClass

static SharedInstanceClass *sharedInstance = nil;

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

@end

2) Использование GCD: -

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

Они должны вызываться как: -

SharedInstanceClass *instance = [SharedInstanceClass sharedInstance];

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

С уважением,

3 голосов
/ 08 апреля 2011

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

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

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

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

Вы можете узнать больше о KVO в Документация Apple или более на mindsizzlers для небольшого и простого учебника.

1 голос
/ 22 мая 2013

Интерфейс

@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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...