zoukankan      html  css  js  c++  java
  • 多线程练习 -- 单例设计模式

    Singleton.h

    #define singleton_h(name) + (instancetype)shared##name;
    
    #if __has_feature (objc_arc)
    
    #define singleton_m(name) 
    static id _instance; 
    
    + (id)allocWithZone:(struct _NSZone *)zone 
    { 
        static dispatch_once_t onceToken; 
        dispatch_once(&onceToken, ^{ 
            _instance = [super allocWithZone:zone]; 
        }); 
        return _instance; 
    } 
    
    + (instancetype)sharedOnlyoneClass 
    { 
        static dispatch_once_t onceToken; 
        dispatch_once(&onceToken, ^{ 
            _instance = [[self alloc] init]; 
        }); 
        return _instance; 
    }
    
    
    #else
    
    #define singleton_m(name) 
    static id _instance; 
    
    + (id)allocWithZone:(struct _NSZone *)zone 
    { 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
    _instance = [super allocWithZone:zone]; 
    }); 
    return _instance; 
    } 
    
    + (instancetype)shared##name 
    { 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
    _instance = [[self alloc] init]; 
    }); 
    return _instance; 
    } 
    - (oneway void)release 
    { 
       
    } 
    - (id)retain 
    {
        return _instance; 
    } 
    
    - (NSUInteger)retainCount 
    { 
        return 1; 
    } 
    
    - (id)autorelease 
    { 
        return _instance; 
    } 
    
    + (id)copyWithZone:(struct _NSZone *)zone 
    { 
        return _instance; 
    } 
    
    + (id)mutableCopyWithZone:(struct _NSZone *)zone 
    { 
        return _instance; 
    }
    
    #endif
    View Code

    LWTOnlyoneClass.h

    #import <Foundation/Foundation.h>
    #import "Singleton.h"
    
    @interface LWTOnlyoneClass : NSObject
    
    @property (nonatomic, copy) NSString *name;
    
    singleton_h(OnlyoneClass)
    
    @end
    View Code

    LWTOnlyoneClass.m

    //
    //  LWTOnlyoneClass.m
    //  多线程练习 -- 单例设计模式
    //
    //  Created by apple on 14-6-24.
    //  Copyright (c) 2014年 lwt. All rights reserved.
    //
    
    #import "LWTOnlyoneClass.h"
    
    @implementation LWTOnlyoneClass
    
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            static dispatch_once_t onceToken;
            dispatch_once(&onceToken, ^{
                self.name = @"jack";
            });
        }
        return self;
    }
    
    singleton_m(OnlyoneClass)
    
    @end
    View Code

    LWTViewController.h

    #import <UIKit/UIKit.h>
    
    @interface LWTViewController : UIViewController
    
    @end
    View Code

    LWTViewController.m

    //
    //  LWTViewController.m
    //  多线程练习 -- 单例设计模式
    //
    //  Created by apple on 14-6-24.
    //  Copyright (c) 2014年 lwt. All rights reserved.
    //
    
    #import "LWTViewController.h"
    #import "LWTOnlyoneClass.h"
    
    @interface LWTViewController ()
    
    @end
    
    @implementation LWTViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        LWTOnlyoneClass *onlyone1 = [[LWTOnlyoneClass alloc] init];
        LWTOnlyoneClass *onlyone2 = [LWTOnlyoneClass sharedOnlyoneClass];
        onlyone2.name = @"Tom";
        LWTOnlyoneClass *onlyone3 = [[LWTOnlyoneClass alloc] init];
        onlyone3.name = @"rose";
        LWTOnlyoneClass *onlyone4 = [LWTOnlyoneClass sharedOnlyoneClass];
        onlyone4.name = @"jim";
        
    //#if __has_feature (objc_arc)
    //    LWTOnlyoneClass *onlyone5 = [LWTOnlyoneClass sharedOnlyoneClass];
    //    LWTOnlyoneClass *onlyone6 = [LWTOnlyoneClass sharedOnlyoneClass];
    ////#else
    //    LWTOnlyoneClass *onlyone5 = [onlyone2 copy];
    //    LWTOnlyoneClass *onlyone6 = [onlyone3 mutableCopy];
    //#endif
        
        
        
        NSLog(@"%p -- %p -- %p -- %p", onlyone1, onlyone2, onlyone3, onlyone4);
        NSLog(@"%@ -- %@ -- %@ -- %@", onlyone1.name, onlyone2.name, onlyone3.name, onlyone4.name);
    }
    
    
    @end
    View Code
  • 相关阅读:
    C#使用枚举方法来实现读取用户电脑中安装的软件
    C#实现窗体阴影效果
    [转]SQLserver字符串分割函数
    [转]WinForm实现win7 Aero磨砂效果介绍
    C#通过鼠标点击panel移动来控制无边框窗体移动
    [转]Table交替行变色 鼠标经过变色 单击变色
    《面向对象程序设计》 三 Calculator 计算器初步
    PAT 1001A+B Format
    大一下学期的自我目标
    《面向对象程序设计》第二次作业
  • 原文地址:https://www.cnblogs.com/wentianblog/p/3808822.html
Copyright © 2011-2022 走看看