/***************************************User.h***************************************/
//
// User.h
// sigtonDemo
//
// Created by Warrior on 14-1-7.
// Copyright (c) 2014年 Warrior. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface User : NSObject <NSCopying>
@property (nonatomic,copy) NSString *name;
@property (nonatomic,copy) NSString *passWord;
+(id)defaultUser;
@end
/***************************************User.m***************************************/
//
// User.m
// sigtonDemo
//
// Created by Warrior on 14-1-7.
// Copyright (c) 2014年 Warrior. All rights reserved.
//
#import “User.h”
static User *defaultUser = nil;
@implementation User
@synthesize name;
@synthesize passWord;
+(id)defaultUser
{
@synchronized(self) //这里要锁,否则会在多线程中出错。
{
if(defaultUser == nil)
{
defaultUser = [[[self class] alloc] init];
}
}
return defaultUser;
}
#pragma mark - 下面的方法为了确保只有一个实例对象
//覆盖allocWithZone方法
+(id) allocWithZone:(NSZone *)zone
{
if(defaultUser == nil)
{
defaultUser = [super allocWithZone:zone];
}
return defaultUser;
}
-(id) copyWithZone:(NSZone *)zone
{
return defaultUser;
}
/*
-(id) retain
{
return defaultUser;
}
-(oneway void) release
{
//什么也不做
}
-(id) autorelease
{
return defaultUser;
}
-(NSUInteger) retainCount
{
return UINT_MAX;
}
*/
@end
使用自定义类。/***************************************main.m***************************************/
//
// main.m
// sigtonDemo
//
// Created by Warrior on 14-1-7.
// Copyright (c) 2014年 Warrior. All rights reserved.
//
#import <Foundation/Foundation.h>
#import “User.h”
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSLog(@”单例设计模式”);
//这里创建的3个方法,都是指向一个对象地址
User *user1 = [User defaultUser];
User *user2 = [[User alloc] init];
User *user3 = [user2 copy];
NSLog(@”User1 :%p”,user1);
NSLog(@”User2 :%p”,user2);
NSLog(@”User3 :%p”,user3);
}
return 0;
}