zoukankan      html  css  js  c++  java
  • IOS开发(64)之GCD任务最多只执行一次

    1 前言

    使用 dispatch_once 函数 在 APP 的生命周期内来保证你想确保每段代码只执行一次,即使它在代码的不同地方多次调用(比如单例的初始化)。

    2 代码实例

    ZYAppDelegate.m

    //一个用于调度一次函数的标识
    static dispatch_once_t onceToken;
    //Block Object
    void (^executedOnlyOnce)(void) = ^{
        static NSUInteger numberOfEntries = 0;
        numberOfEntries++;
        NSLog(@"Executed %lu time(s)", (unsigned long)numberOfEntries);
    };
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        //声明一个队列
        dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        //执行一次的队列
        dispatch_once(&onceToken, ^{ dispatch_async(concurrentQueue,
                                                    executedOnlyOnce);
        });
        dispatch_once(&onceToken, ^{ dispatch_async(concurrentQueue,
                                                    executedOnlyOnce);
        });
        self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
        // Override point for customization after application launch.
        self.viewController = [[[ZYViewController alloc] initWithNibName:@"ZYViewController" bundle:nil] autorelease];
        self.window.rootViewController = self.viewController;
        [self.window makeKeyAndVisible];
        return YES;
    }

    ZYViewController.m

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        ZYMySingleton *test = [[ZYMySingleton alloc] init];
        //循环单例方法
        for (int i=0; i<5; i++) {
            [test sharedInstance];
        }
        [test release];
    }

    ZYMySingleton.m

    - (id) sharedInstance{
        static ZYMySingleton *SharedInstance = nil;
        //一个用于调度一次函数的标识
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            SharedInstance = [ZYMySingleton new];
            NSLog(@"SharedInstance is ======>%@",SharedInstance);
        });
        return SharedInstance;
    }

    运行后控制台显示结果

    2013-05-10 17:30:49.334 GCDSingleTest[2717:1303] Executed 1 time(s)

    2013-05-10 17:30:49.336 GCDSingleTest[2717:c07] SharedInstance is ======><ZYMySingleton: 0x7195990>

    3 结语

    以上是所有内容,希望对大家有所帮助

    Demo代码下载:http://download.csdn.net/detail/u010013695/5353668

  • 相关阅读:
    HDU 6071
    HDU 6073
    HDU 2124 Repair the Wall(贪心)
    HDU 2037 今年暑假不AC(贪心)
    HDU 1257 最少拦截系统(贪心)
    HDU 1789 Doing Homework again(贪心)
    HDU 1009 FatMouse' Trade(贪心)
    HDU 2216 Game III(BFS)
    HDU 1509 Windows Message Queue(队列)
    HDU 1081 To The Max(动态规划)
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3072042.html
Copyright © 2011-2022 走看看