设计根据标示符全局只运行一次的类
生活随笔
收集整理的這篇文章主要介紹了
设计根据标示符全局只运行一次的类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
設計根據標示符全局只運行一次的類
全局只運行一次的代碼,第一個想到的絕對是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 *)flagclass:(Class)objectClassfirstTime:(StaticFlagBlock)firstTimeotherTimes:(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 *)flagclass:(Class)objectClassfirstTime:(StaticFlagBlock)firstTimeotherTimes:(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:FLAGclass:[AppDelegate class]firstTime:^{NSLog(@"第一次");}otherTimes:^{NSLog(@"第二次");}];[StaticFlag flag:FLAGclass:[AppDelegate class]firstTime:^{NSLog(@"第一次");}otherTimes:^{NSLog(@"第二次");}];return YES; }@end?
轉載于:https://www.cnblogs.com/YouXianMing/p/3893721.html
總結
以上是生活随笔為你收集整理的设计根据标示符全局只运行一次的类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux查找特定类型的文件中是否包含特
- 下一篇: 【c++】【转】c++中的explici