#import <Foundation/Foundation.h>
#import "UserContext.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
UserContext *userContext = [UserContext shareUserContext];
UserContext *userContext2 = [UserContext shareUserContext];
UserContext *userContext3 = [[UserContext alloc]init];
UserContext *userContext4 = [userContext copy];
UserContext *userContext5 = [userContext copy];
[userContext retain];
[userContext release];
[userContext release];
[userContext release];
NSLog(@"");
}
return 0;
}
#import <Foundation/Foundation.h>
@interface UserContext : NSObject<NSCopying>
@property (nonatomic,copy)NSString *userName;
@property (nonatomic,copy)NSString *email;
+ (id)shareUserContext; //单例命名习惯前缀:share或default关键字
@end
#import "UserContext.h"
static UserContext *segtonInstance = nil;
@implementation UserContext
+ (id)shareUserContext
{
@synchronized(self) //线程保护
{
if (segtonInstance == nil)
{
segtonInstance = [[[self class]alloc]init];
}
}
return segtonInstance;
}
//下面方法为了确保一个实例
+ (id)allocWithZone:(struct _NSZone *)zone{
if (segtonInstance == nil) {
segtonInstance = [super allocWithZone:zone];
}
return segtonInstance;
}
- (id)copyWithZone:(nullable NSZone *)zone {
return segtonInstance;
}
- (id)retain{
return segtonInstance;
}
- (oneway void)release{
}
- (id)autorelease{
return segtonInstance;
}
-(NSUInteger)retainCount{
return UINT_MAX;
}
@end