如何解决单例实现存在问题
| 我在单例实现上遇到了问题。我想放在单身人士身上的物件似乎损坏了,我不知道为什么。任何帮助表示赞赏。 这是单例的代码: SessionServices.h #import <Foundation/Foundation.h>
/**
This class provides a simple way of getting information about the connected user
*/
@class UserIHM;
@interface SessionServices : NSObject {
@private
UserIHM *user; //the object to retain
}
@property (nonatomic,retain) UserIHM *user;
sessionServices.m
@implementation SessionServices
@synthesize user;
static SessionServices *INSTANCE = nil;
+ (SessionServices*)sharedInstance
{
if (INSTANCE == nil) {
INSTANCE = [[super allocWithZone:NULL] init];
}
return INSTANCE;
}
....
//singleton impl from apple documentation
...
}
userIHM.h
@interface UserIHM : NSObject {
@private
NSString *tagUID;
NSString *username;
BOOL isAdmin;
}
@property (nonatomic,retain) NSString *tagUID;
@property (nonatomic,retain) NSString *username;
@property (nonatomic) BOOL isAdmin;
然后在SessionServices.m中,我调用:
user = [[IHMObjectFinderServices sharedInstance] getUserByTagUID:userTagUID];
并且用户的所有字段都填充有正确的信息。
塔吉德= 2ac6912a
用户名= Mike
isAdmin =否
然后我尝试使用此信息设置UITableView的标题
self.navigationItem.title = [NSString stringWithFormat:@\"Projects: %@\",[[[SessionServices sharedInstance] user] username]];
如果我使用NSLog并使用调试器,则可以看到用户名变成了
无效的CFString
我究竟做错了什么 ?
解决方法
根据您的评论,您遇到的问题取决于您未在单例实现中初始化* user ivar的事实。
为此,请定义适当的“ 5”方法。在这方面(初始化),单例的行为类似于普通类。
- (id)init {
self = [super init];
if (self != nil) {
user = [[UserIHM alloc] init]; //-- sergio: added alloc/init
user.username = @\"\";
user.tagUID = @\"\";
user.isAdmin = NO;
}
return (self);
}
,这个习语稍微好一点:
+(SessionServices *)singleton {
static dispatch_once_t pred;
static SessionServices *shared = nil;
dispatch_once(&pred,^{
shared = [[SessionServices alloc] init];
// init your variables here
shared.blah = blahblah;
});
return shared;
}
有关说明,请参阅单身人士的护理和喂养。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。