我正在努力找出单身人士的最佳实施方式 这是我得到的最新消息。
这是.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]
两者都将返回相同的对象。
答案 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方法。