gpt4 book ai didi

iphone - XCode 4.3 单例

转载 作者:行者123 更新时间:2023-12-03 19:55:05 26 4
gpt4 key购买 nike

所以我刚刚从 xcode 4.2 切换到 4.3,现在我创建/使用单例的旧方法不起作用。所以我研究了如何设置单例,我在这里有这段代码。

GlobalLogin.h

@interface GlobalLogin : UIViewController
+(GlobalLogin *)sharedInstance;
@end

GlobalLogin.m

@implementation GlobalLogin


#pragma mark -
#pragma mark Singleton Methods

+ (GlobalLogin*)sharedInstance {

static GlobalLogin * sharedInstance;
if(!sharedInstance) {
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
sharedInstance = [[super allocWithZone:nil] init];
});
}

return sharedInstance;
}

+ (id)allocWithZone:(NSZone *)zone {

return [self sharedInstance];
}


- (id)copyWithZone:(NSZone *)zone {
return self;
}

#if (!__has_feature(objc_arc))

- (id)retain {

return self;
}

- (unsigned)retainCount {
return UINT_MAX; //denotes an object that cannot be released
}

- (void)release {
//do nothing
}

- (id)autorelease {

return self;
}
#endif

#pragma mark -
#pragma mark Custom Methods

所以我一切都好,但我的问题是我无法在任何地方找到如何在需要使用它的各种 View Controller 中访问其信息。因此,如果有人能指出我正确的方向,我将不胜感激。

最佳答案

我不知道你为什么要调用+[super alloc],它基本上应该已经由alloc本身调用,但我认为你的意思是-[super init],它本身应该已经被 -init 调用。将您的初始值设定项更改为读取

static GlobalLogin * sharedInstance;
if(!sharedInstance) {
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
sharedInstance = [[self alloc] init];
});
}

然后覆盖-init并调用super:

-(id)init {
self = [super init];
if (self) {
//initialization code here
}
return self;
}

关于iphone - XCode 4.3 单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11532381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com