有关SharedInstance的问题

Bir*_*ngz 6 objective-c iphone-sdk-3.0 ios4

嘿伙计们,我想问,什么是shareInstance实际上?我的意思是什么用法?

目前我在2个不同文件之间进行通信时遇到了一些问题.

这是我的问题:我有1个文件调用Ah/Am和另一个文件调用Bh/Bm啊需要访问Bh中的一些数据,所以....有没有可能的方法我可以实现我想要的?只是想知道它是"SharedInstance"能够解决我的问题吗?

寻找回复:)

Lep*_*ron 10

sharedInstance可用于多种方式.

例如,您可以从静态上下文访问对象.实际上它用于支持Singleton模式的大多数方法.这意味着只需要在整个程序代码中使用该类的一个对象,只需要一个实例.

界面可以如下所示:

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

+ (ARViewController *) sharedInstance;
Run Code Online (Sandbox Code Playgroud)

实现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;
}
Run Code Online (Sandbox Code Playgroud)

要访问它,请在CustomARFunction类中使用以下内容:

#import "ARViewController.h"

@implementation CustomARFunction.m

- (void) yourMethod
{
    [ARViewController sharedInstance].ARName = @"New Name";
}
Run Code Online (Sandbox Code Playgroud)


小智 7

共享实例是一个过程,您可以通过该过程在项目中的任何位置访问类的相同实例或对象.这背后的主要思想是每次调用一个方法时返回相同的对象,以便存储在实例中的值/属性可以在应用程序的任何地方使用.

这可以通过以下2个简单过程完成: -

1)使用仅初始化一次的静态变量

@implementation SharedInstanceClass

static SharedInstanceClass *sharedInstance = nil;

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

@end
Run Code Online (Sandbox Code Playgroud)

2)使用GCD: -

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

这些必须被称为: -

SharedInstanceClass *instance = [SharedInstanceClass sharedInstance];
Run Code Online (Sandbox Code Playgroud)

因此,每次从函数返回相同的实例,并且将保留设置为属性的值,并且可以在应用程序的任何位置使用.

问候,