首页 > 代码库 > 设计根据标示符全局只运行一次的类
设计根据标示符全局只运行一次的类
设计根据标示符全局只运行一次的类
全局只运行一次的代码,第一个想到的绝对是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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。