首页 > 其他 > 详细

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

时间:2014-08-06 22:49:12      阅读:364      评论:0      收藏:0      [点我收藏+]

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

bubuko.com,布布扣

全局只运行一次的代码,第一个想到的绝对是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

bubuko.com,布布扣

 

设计根据标示符全局只运行一次的类,布布扣,bubuko.com

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

原文:http://www.cnblogs.com/YouXianMing/p/3893721.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!