static MyGizmoClass *sharedGizmoManager = nil;
+ (MyGizmoClass*)sharedManager
{
@synchronized(self) {
if (sharedGizmoManager == nil) {
[[self alloc] init]; // assignment not done here
}
}
return sharedGizmoManager;
}
+ (id)allocWithZone:(NSZone *)zone
{
@synchronized(self) {
if (sharedGizmoManager == nil) {
sharedGizmoManager = [super allocWithZone:zone];
return sharedGizmoManager; // assignment and return on first allocation
}
}
return nil; //on subsequent allocation attempts return nil
}
- (id)copyWithZone:(NSZone *)zone
{
return self;
}
- (id)retain
{
return self;
}
- (unsigned)retainCount
{
return UINT_MAX; //denotes an object that cannot be released
}
- (void)release
{
//do nothing
}
- (id)autorelease
{
return self;
}
碰到allocWithZone, copyWithZone总会有个疑问,这个NSZone到底是个什么东西?
简单来说,可以想象成一个内存池,alloc或是dealloc这些操作,都是在这个内存池中操作的。
cocoa总是会配置一个默认的NSZone,任何默认的内存操作都是在这个“zone”上操作的。默认的NSZone的缺陷在于,它是全局范围的,时间一长,必然会导致内存的碎片化,如果你需要大量的alloc一些object,那么性能就会受到一些影响。
所有cocoa提供方法,你可以自己生成一个NSZone,并将alloc, copy全部限制在这个”zone“之内。
本文探讨了单例模式在Objective-C中的实现细节,并解释了NSZone的作用及其对内存分配的影响。通过具体代码示例说明如何使用NSZone来优化大量对象的分配过程,减少内存碎片并提高性能。
1162

被折叠的 条评论
为什么被折叠?



