zoukankan      html  css  js  c++  java
  • 设计根据标示符全局只运行一次的类

    设计根据标示符全局只运行一次的类

    全局只运行一次的代码,第一个想到的绝对是dispatch_once,这是不二的选择嘛,dispatch_once还是线程安全的.

    这里我将提供一种非线程安全但也可以使用的全局只运行一次的代码,设计很简单:

    现在提供类如下:

    StaticFlag.h   +   StaticFlag.m

    //
    //  StaticFlag.h
    //  Static
    //
    //  Copyright (c) 2014年 Y.X. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    typedef void (^StaticFlagBlock)();
    
    @interface StaticFlag : NSObject
    
    + (void)flag:(NSString *)flag
           class:(Class)objectClass
       firstTime:(StaticFlagBlock)firstTime
      otherTimes:(StaticFlagBlock)otherTimes;
    
    @end
    //
    //  StaticFlag.m
    //  Static
    //
    //  Copyright (c) 2014年 Y.X. All rights reserved.
    //
    
    #import "StaticFlag.h"
    
    static NSMutableDictionary *flagDictionary  = nil;
    
    @implementation StaticFlag
    
    + (void)initialize
    {
        if (self == [StaticFlag class])
        {
            flagDictionary = [NSMutableDictionary new];
        }
    }
    
    + (void)flag:(NSString *)flag
           class:(Class)objectClass
       firstTime:(StaticFlagBlock)firstTime
      otherTimes:(StaticFlagBlock)otherTimes
    {
        NSString *str = [NSStringFromClass(objectClass) stringByAppendingString:flag];
        NSLog(@"%@", str);
        
        if ([flagDictionary valueForKey:str] == nil)
        {
            [flagDictionary setObject:@"HAVE" forKey:str];
            firstTime();
        }
        else
        {
            otherTimes();
        }
    }
    
    @end

    使用情况:

    //
    //  AppDelegate.m
    //  OnlyOne
    //
    //  Copyright (c) 2014年 Y.X. All rights reserved.
    //
    
    #import "AppDelegate.h"
    #import "StaticFlag.h"
    
    #define FLAG  @"YouXianMing"
    
    @implementation AppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        [StaticFlag flag:FLAG
                   class:[AppDelegate class]
               firstTime:^{
                   NSLog(@"第一次");
               }
              otherTimes:^{
                  NSLog(@"第二次");
              }];
        
        
        [StaticFlag flag:FLAG
                   class:[AppDelegate class]
               firstTime:^{
                   NSLog(@"第一次");
               }
              otherTimes:^{
                  NSLog(@"第二次");
              }];
        
        
        return YES;
    }
    
    @end

  • 相关阅读:
    最好的委托与事件详解一(转自张子阳博客)
    事务处理两种方式(转自一壶茶水)
    条目列表点击效果
    html可变大小字体
    udp群聊
    vbs隐藏运行bat之木马合体
    淘宝客网站的链接跳转形式
    工作之外八小时,用辛苦换幸福
    怕吃苦,吃苦一辈子
    外链建设的六个方法
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3893721.html
Copyright © 2011-2022 走看看