所以我刚刚从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
所以我已经没事了,但我的问题是我无法在任何地方找到如何在需要使用它的各种视图控制器中访问其信息。因此,如果有人能指出我正确的方向,我会非常感激。
答案 0 :(得分:2)
我不知道为什么你会调用+[super alloc]
,它本应基本上由alloc本身调用,但我认为你的意思是-[super init]
,它本身应该已经被{{1 }}。将初始化程序更改为
-init
然后覆盖static GlobalLogin * sharedInstance;
if(!sharedInstance) {
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
sharedInstance = [[self alloc] init];
});
}
并调用super:
-init