ARC单例:

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

单例的模式在网上有很多,今天发下我个人对单例模式的理解。整个app中只存在一个实例,也只会进行一次实例,在实例完成之后是不可以人释放的(当App关闭之后,等系统自己回收)。

也就是说,如果我们写得某个类符合了上述条件,那么我们也可以称这个类为单例。

在非ARC的工程中,我们需要针对alloc,retain,copy等会增加retaincount的参数加以控制,对release和autorelease等减少retailcount的操作增加控制,以确保单一实例,绝不释放。

在ARC的工厂中,由于,内存管理是有系统来完成的,确切的说单例是不存在的,以为在内存吃紧的情况下,系统会回收,这样造成,可能重复实例。这样的话,你之前实例里面保存的数据就会丢失,所以说不存在。(个人理解)

下面来分享下我是如何做单例的

非ARC单例:

#import<Foundation/Foundation.h>@interfaceBaseSingle : NSObject+(id)getInstance;@end

.m文件中,重写方法增加控制

#import"BaseSingle.h"@implementationBaseSingle+(id)getInstance{returnnil;

}+(id)allocWithZone:(struct_NSZone *)zone{return[[self getInstance] retain];

}-(id)copyWithZone:(struct_NSZone *)zone{returnself;

}-(id)retain{returnself;

}-(NSUInteger)retainCount{returnNSUIntegerMax;

}-(onewayvoid)release{return;

}-(id)autorelease{returnself;

}

然后我们调用的时候继承下BaseSingle 重写 getInstance方法。

例如:其中FileDownLoadManager 继承 BaseSingle

+(FileDownLoadManager *)getInstance{staticFileDownLoadManager * shareFileDownLoadManager =nil;

@synchronized(self){if(shareFileDownLoadManager ==nil) {

shareFileDownLoadManager= [NSAllocateObject([selfclass],0, NULL) init];

}

}returnshareFileDownLoadManager;

}

这样一个妥妥的单例就完成了。

ARC单例:关于ARC单例就不在这里赘述了,相信大家都懂了。。。嘿嘿

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航