我有一个问题,如下所述和解决方案。但我认为我们的解决方案并不是解决这个问题的真正“正确方法”。
1:我有数据的线程安全单例
//DataSingleton.h
@interface DataSingleton : NSObject
@property (nonatomic, readonly, retain) NSString *userLogin;
-(void)setPrettyLogin:(NSString*)prettyLogin;
@end
和
//DataSingleton.m
#import "DataSingleton.h"
@synthesize userLogin = _userLogin;
+(id)sharedSingleton{
static dispatch_once_t DataSPred;
static DataSingleton *shared = nil;
dispatch_once(&DataSPred, ^{ shared = [[self alloc] init]; });
return shared;
}
-(void)setPrettyLogin:(NSString*)prettyLogin{
_userLogin = prettyLogin;
}
@end
2:我也有相同的网络单例,我使用功能
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{ <block> }];
// I know about mainQueue - only for UI. Here it is, for clarity.
3:问题
当我尝试在 NSURLConnection 块中获取[[DataSingleton sharedSingleton] userLogin](在 NetworkSingleton 方法之一中) - 我得到相同的时间并且在_userLogin我发现了一些垃圾 =(
4:不好的解决方案
我花了大约一个小时,没有找到我的问题的正确答案。并创建这个:
//DataSingleton.h
@interface DataSingleton : NSObject{
NSString* _userLogin;
}
-(NSString*)userLogin;
-(void)setPrettyLogin:(NSString*)prettyLogin;
@end
和
//DataSingleton.m
#import "DataSingleton.h"
+(id)sharedSingleton{
static dispatch_once_t DataSPred;
static DataSingleton *shared = nil;
dispatch_once(&DataSPred, ^{ shared = [[self alloc] init]; });
return shared;
}
-(NSString*)userLogin{
return _userLogin;
}
-(void)setPrettyLogin:(NSString*)prettyLogin{
_userLogin = [prettyLogin retain];
//I can,t release it and
//static code analysis is not happy with what is happening
}
@end
有人有这个想法吗?
最好的问候谢尔盖