最近我读别人的代码,看到他写的单例模式修改了retain, release:- (id)retain
{
return self;
}- (unsigned)retainCount
{
return UINT_MAX; //denotes an object that cannot be released
}- (oneway void)release
{
//do nothing
}- (id)autorelease
{
return self;
}- (void)dealloc {
[_sharedManager release];
[super dealloc];
}
请问这样做是否必要呢?另外,如何让这个类只能调用shardInstance,而不让别人调用alloc init呢?
{
return self;
}- (unsigned)retainCount
{
return UINT_MAX; //denotes an object that cannot be released
}- (oneway void)release
{
//do nothing
}- (id)autorelease
{
return self;
}- (void)dealloc {
[_sharedManager release];
[super dealloc];
}
请问这样做是否必要呢?另外,如何让这个类只能调用shardInstance,而不让别人调用alloc init呢?
+(AppropriateSingleton *) sharedAppropriateSingleton {
@synchronized (self) {
if (instance_ == nil) {
// instance_ = [[super allocWithZone:NULL] init]; // OR
instance_ = [NSAllocateObject([self class], 0, NULL) init];
}
}
return instance_;
}+(id) allocWithZone:(NSZone *)zone {
@synchronized (self) {
return [[self sharedAppropriateSingleton] retain];
}
}-(id) copyWithZone:(NSZone *) zone {
return self;
}
这样如何 ?
别人调用这个类之前至少也应该知道这个类是干嘛的吧。所以让别人调用就是调用shareInstance的吧。至少我看到的都是这样。(正好想到obj-c如何使用单例,就找到这个旧帖了~结果公司的项目里面有,还用了一堆宏来写,刚开始也看到,结果不知道什么意思,现在终于知道了。附上一句“代码虐我千百遍,我待代码如初恋”)