zoukankan      html  css  js  c++  java
  • 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;

    }



  • 相关阅读:
    java基础(一)
    java概述
    七大查找十大排序之二排序
    bat批处理脚本语言(一)
    photoshop安装与破解
    office——excel常用函数
    arcgis engine开发环境搭建
    七大查找十大排序算法(一)
    华为路由交换常用命令
    cisco路由交换常用命令
  • 原文地址:https://www.cnblogs.com/suenihy/p/3509200.html
Copyright © 2011-2022 走看看