iOS 单例设计模式

/***************************************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;

}



原文地址:https://www.cnblogs.com/suenihy/p/3509200.html