c语言中执行一次的函数once,iOS只执行一次的方法
IOS開發(64)之GCD任務最多只執行一次
1 前言
使用 dispatch_once 函數 在 APP 的生命周期內來保證你想確保每段代碼只執行一次,即使它在代碼的不同地方多次調用(比如單例的初始化)。
2 代碼實例
ZYAppDelegate.m
[plain]
/一個用于調度一次函數的標識
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;
}
//一個用于調度一次函數的標識
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
[plain]
- (void)viewDidLoad
{
[super viewDidLoad];
ZYMySingleton *test = [[ZYMySingleton alloc] init];
//循環單例方法
for (int i=0; i<5; i++) {
[test sharedInstance];
}
[test release];
}
- (void)viewDidLoad
{
[super viewDidLoad];
ZYMySingleton *test = [[ZYMySingleton alloc] init];
//循環單例方法
for (int i=0; i<5; i++) {
[test sharedInstance];
}
[test release];
}
ZYMySingleton.m
[plain] view plaincopyprint?- (id) sharedInstance{
static ZYMySingleton *SharedInstance = nil;
//一個用于調度一次函數的標識
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
SharedInstance = [ZYMySingleton new];
NSLog(@"SharedInstance is ======>%@",SharedInstance);
});
return SharedInstance;
}
- (id) sharedInstance{
static ZYMySingleton *SharedInstance = nil;
//一個用于調度一次函數的標識
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
SharedInstance = [ZYMySingleton new];
NSLog(@"SharedInstance is ======>%@",SharedInstance);
});
return SharedInstance;
}
運行后控制臺顯示結果
iOS延時執行的四種方法
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
測試框架Unitest的運行原理,以及多個測試類中的執行順序以及簡化方法
單元測試單元測試(unit testing)是指對軟件中的最小可測試單元進行檢查和驗證.對于單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義,如C語言中單元指一個函數,Java里單元指一 ...
ajax多次請求,只執行最后一次的方法
ajax多次請求,只執行最后一次的方法 有時候點擊按鈕進行異步請求數據的時候可能網絡差,用戶會點擊很多次,或者頁面有很多相同的按鈕,參數不同,但是調用的ajax相同,只想得到最后一次結果 我的思路是用 ...
ios想要取消執行延時調用的方法
想要取消執行延時調用的方法: [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(hideDia ...
IOS 后臺執行
在IOS后臺執行是本文要介紹的內容,大多數應用程序進入后臺狀態不久后轉入暫停狀態.在這種狀態下,應用程序不執行任何代碼,并有可能在任意時候從內存中刪除.應用程序提供特定的服務,用戶可以請求后臺執行時間 ...
UIViewController的生命周期及iOS程序執行順序
UIViewController的生命周期及iOS程序執行順序 ? ? 當一個視圖控制器被創建,并在屏幕上顯示的時候. 代碼的執行順序1. alloc ? ? ? ? ? ? ? ? ? ? ? ? ...
【iOS 開發】Objective - C 面向對象 - 方法 | 成員變量 | 隱藏封裝 | KVC | KVO | 初始化 | 多態
一. Objective-C 方法詳解 1. 方法屬性 (1) OC 方法傳參機制 Object-C 方法傳參機制 : OC 中得參數傳遞都是值傳遞, 傳入參數的是參數的副本; -- 基本類型 (值傳 ...
iOS微信實現第三方登錄的方法
這篇文章主要介紹了iOS微信第三方登錄實現的全過程,一步一步告訴大家iOS微信實現第三方登錄的方法,感興趣的小伙伴們可以參考一下 ? 一.接入微信第三方登錄準備工作.移動應用微信登錄是基于OAuth2 ...
iOS控制器與視圖加載方法
轉載記錄, 請看原文: 1. iOS中的各種加載方法(initWithNibName,loadNibNamed,initWithCoder,awakeFromNib等等)簡單使用 ??http://w ...
隨機推薦
Vue 入門指南
英文:http://vuejs.org/guide/index.html 介紹 vue.js 是用來構建web應用接口的一個庫 技術上,Vue.js 重點集中在MVVM模式的ViewModel層,它連 ...
【轉載】 python修飾符@
@符號在python語言中具有特殊含義,用來作為修飾符使用,?@修飾符有點像函數指針,python解釋器發現執行的時候如果碰到@修飾的函數,首先就解析它,找到它對應的函數進行調用,并且會把@修飾下面一 ...
未能進入中斷模式,原因如下:源文件“XXXXXX”不屬于正在調試的項目。
這個問題是由于項目文件位置變動導致的.提示框已經說的比較清楚了. 首先可以嘗試[重新生成] ,一般可以解決這個問題了. 我遇到的情況是,設置配置時,不小心取消了生成選擇. 所以打開配置管理器,把相關的 ...
key 限制字符的輸入
//限制字符的輸入 { 只能輸入以下字符 } procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);begin? If (Key ...
【HDU 5808】 Price List Strike Back (整體二分+動態規劃)
Price List Strike Back There are?nn?shops numbered with successive integers from?11?to?nn?in Bytelan ...
sql server版本、組件和管理工具
以下信息由何問起收集,希望有幫助. SQL Server?版本 定義 Enterprise 作為高級版本,?SQL Server?Enterprise 版提供了全面的高端數據中心功能,性能極為快捷.虛 ...
sqlserver 導入數據出現 無法創建 OLE DB 取值函數。請查看列元數據是否有效
我用的是Sql Server 的導入導出功能來實現的,但是有些數據可以導進去,有些就不行.總是出現一些錯誤! 執行之前 (錯誤)消息錯誤 0xc0202005: 數據流任務: 在數據源中找不到列“Un ...
FreeSWITCH快速錄音
一.背景 測試人員反映FreeSWITCH錄音不及時,需要大約5秒的時間才能捕獲到RTP流. 二.原因及解決 查了下資料,FreeSWITCH默認的錄音參數配置是開啟緩沖的, 即RTP流大小到達655 ...
Nginx的啟動、停止、重啟
啟動 啟動代碼格式:nginx安裝目錄地址 -c nginx配置文件地址 例如: [root@LinuxServer sbin]# /usr/local/nginx/sbin/nginx -c /us ...
mysql查找數據庫中是否已經存在某張表
Sql: select count(*) from information_schema.TABLES t where t.TABLE_SCHEMA ="數據庫名" and t.T ...
總結
以上是生活随笔為你收集整理的c语言中执行一次的函数once,iOS只执行一次的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java二期_JAVA基础之多线程二期
- 下一篇: 计算机里的东西太多,电脑里的东西太多,怎