To implement a singleton class in objective-c, you need to do at least the following four steps:
1, for a singleton object to implement a static instance, and initialize, and then set to nil,
2. Implement an instance construction method to check if the static instance declared above is nil, and if it is new and returns an instance of this class,
3, rewrite the Allocwithzone method, to ensure that other people directly use Alloc and Init to try to gain a new strength when the time does not produce a new instance,
4, the appropriate implementation of Allocwithezone,copywithzone,release and Autorelease. static Surveyruntimedata *sharedobj = nil; First step: static instance, and initialize.
@implementation Surveyruntimedata
+ (surveyruntimedata*) sharedinstance//Second step: instance construction checks if the static instance is nil
{
@synchronized (self)
{
if (sharedobj = = nil)
{
[[Self alloc] init];
}
}
return sharedobj;
}
+ (ID) Allocwithzone: (Nszone *) zone//step three: Overriding the Allocwithzone method
{
@synchronized (self) {
if (sharedobj = = nil) {
Sharedobj = [Super Allocwithzone:zone];
return sharedobj;
}
}
return nil;
}
-(ID) Copywithzone: (Nszone *) zone//Fourth step
{
return self;
}
-(ID) retain
{
return self;
}
-(unsigned) retaincount
{
return Uint_max;
}
-(OneWay void) release
{
}
-(ID) autorelease
{
return self;
}
-(ID) init
{
@synchronized (self) {
[Super init];//tend to put some variables to initialize.
return self;
}
}
@end
iOS single-case mode