Objective-C单例实现

时间:2017-09-20 10:33:03

标签: ios objective-c iphone mobile singleton

我正在努力找出单身人士的最佳实施方式 这是我得到的最新消息。

这是.m文件实现,它有什么问题:

#import "Foo.h"

static Foo *object = nil;

@implementation Foo

+ (Foo*)sharedObject {
   return [[Foo alloc] init];
}

- (id)init {
    static dispatch_once_t once;
    dispatch_once(&once, ^{
       object = [super init];
    });

  return object;
}

@end

并使用它我可以做到:

[Foo sharedObject]

[[Foo alloc] init]

两者都将返回相同的对象。

1 个答案:

答案 0 :(得分:0)

根据你的Foo课程。当你调用这两种方法时没有任何不同。 但是如果你能改变你的Foo单例方法,我认为更好

+ (id) sharedObject {
    static Foo *sharedobj = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedobj = [[self alloc] init];
    });
    return sharedobj;
}

- (id)init {
  if (self = [super init]) {
      someProperty = [[NSString alloc] initWithString:@"Default Property Value"];
  }
  return self;
}

让我们假设您要创建新实例。但是它不会创建使用alloc方法,因为你重写了init方法。