iOS 開發 nonatomic 和 atomic
nonatomic : 非原子屬性
atomic : 原子屬性 如果不寫關鍵字 那麼預設就是 原子屬性
- 多執行緒寫入屬性時,保證同一時間只有一個執行緒能夠執行寫入操作
- 單(執行緒)寫多(執行緒)讀執行緒技術,同樣有可能出現"髒資料",重新讀一下
- 效能較慢
執行緒安全
在多個執行緒進行讀寫操作的時候,仍然能夠保證資料正確
UI執行緒(主執行緒) : 共同一個約定,所有更新UI的操作都在主執行緒上執行!
原因:幾乎所有的UIKit 都不是執行緒安全的!"取捨"為了效能!
使用 atomic 的場景 寫入檔案時
NSData * data ; //原子屬性 == YES , 先把檔案儲存在一個臨時的檔案中,等全部寫入之後,再改名 [data writeToFile:@"xxx.mp4" atomically:YES];
實際上,原子屬性內部有一個鎖,自旋鎖
自旋鎖 & 互斥鎖
- 共同點:
都能夠保證執行緒安全.
- 不同點:
互斥鎖:如果執行緒被鎖在外面,就會進入休眠狀態,等待鎖開啟,然後被喚醒!
自旋鎖:如果執行緒被鎖在外面,就會用死迴圈的方式,一直等待鎖開啟!
無論什麼鎖,都很消耗新能.效率不高
相關推薦
iOS 開發 nonatomic 和 atomic
nonatomic : 非原子屬性 atomic : 原子屬性 如果不寫關鍵字 那麼預設就是 原子屬性 - 多執行緒寫入屬性時,保證同一時間只有一個執行緒能夠執行寫入操作 - 單(執行緒)寫多(執行緒)讀執行緒技術,同樣有可能出現"髒資料",重新讀
iOS開發-佇列和同步非同步執行
序列佇列,併發佇列,全域性佇列(併發),主佇列(序列)。 執行的方法有:同步執行和非同步執行。 提到多執行緒:pthread,NSThread,GCD,NSOperation 其中phtread是跨平臺的。 GCD和NSOperation都是常用的,後者是
芒果iOS開發sizeof和strlen的區別
在C語言中sizeof()函式和strlen()函式都可以求字串長度,那麼這兩個函式有什麼區別呢,下邊為大家介紹: 首先定義一個字元陣列: <span style="font-size:18p
iOS開發---CocoaPods和Podfile使用
一、概要 二、安裝 由於網上的教程基本都大同小異,但細節之處還不是很完善,所以藉機會在這裡補充下: 注:要使用CocoaPods,那就要下載安裝它,而下載安裝CocoaPods需要Ruby環境 1、Ruby環境搭建 當前安裝環境為Mac mini 10.
iOS開發——Reachability和AFNetworking判斷網路連線狀態
一、Reachability // 監聽網路狀態改變的通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotifi
iOS開發之關鍵字nonatomic、assign、retain和copy的認識
nonatomic、assign、retain和copy的認識 nonatomic 指非原子性訪問,不加同步,多執行緒併發訪問會提高效能。如果不加此屬性,則預設是兩個訪問方法都為原子型事務訪問。atomic是ObjectC中使用的一種執行緒保護技術,
【iOS開發-51】案例學習:動畫新寫法、刪除子視圖、視圖順序、延遲方法、button多功能使用方法及icon圖標和啟動頁設置
無法查看 font targe 技術 value lstat tostring sta dict 案例效果: (1)導入所需的素材,然後用storyboard把上半截位置和大小相對固定的東西布局起來。當然,這些控件也要定義成對應地IBOutlet和IBActio
在iOS開發的Quartz2D使用中實現圖片剪切和截屏功能
ogr boa selector cgrect 如果 搭建 shu 分享 ins 原文 http://www.jb51.net/article/75671.htm 圖片剪切一、使用Quartz2D完成圖片剪切1.把圖片顯示在自定義的view中先把圖片繪制到v
iOS開發核心語言Objective C —— 面向對象思維、setter和getter方法及點語法
才幹 各路 alt .net 行為 變量的作用域 fadein 格式 讀取 本分享是面向有意向從事iOS開發的夥伴們。或者已經從事了iOS的開發人員。假設您對iOS開發有極高的興趣,能夠與我一起探討iOS開發。一起學習,共同進步。假設您是零基礎,建議您先
ios開發之--CGRect/CGSize/CGPoint/CGVector/CGAffineTransform/UIEdgeInsets/UIOffset和NSString之間的轉換
距離 轉換 nsstring transform ans ins -c cto cnblogs 僅做記錄,一個函數和字符串之間的互相轉換 方法如下: UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UI
iOS開發----操作系統----進程和線程的區別
實體 基本 寄存器和棧 多個 尺度 獨立 部分 應用程序 分配 進程和線程的主要差別在於它們是不同的操作系統資源管理方式。 進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。 線程有自己的堆棧和局部變量,但線程之間
iOS開發-AFNetworking封裝Get(自定義HTTP Header)和Post請求及文件下載
謝謝 filepath pos cat style -type poe repo eth 前面提到AFNetworking是一個很強大的網絡三方庫,首先你需要引入AFNetworking三方庫;如封裝的有誤還請指出,謝謝! 1.Get請求 /**Get請求 url 服務器
IOS開發-提升app性能的25條建議和技巧
contents oar profile 討論 遊戲開發 when plist 數據庫 formats 前言 這篇文章介紹了作者開發工作中總結的25個iOS開發ti
移動端安卓和 IOS 開發框架 Framework7 布局
plus size ont open active image style ner 彈出 對應的各種效果,Framework7 裏面實現的方式比較多,這裏我就只寫我用的一種,樣式有的自己修改了的,想看官方詳細的參見 http://framework7.cn 一、手風琴布局A
ios開發之--tableview刷新某一個區和某一行
anim ios開發 xpath set nsa sat array 代碼 tableview 在開發中,有時候,我們不需要刷新整個表,只需要刷新局部數據即可,具體代碼如下: //section刷新 NSIndexSet *indexSet=[[NSIndexSe
iOS開發:字典(NSDictionary)和陣列( NSArray)轉換成字串
概述: 在專案開發中,總是與伺服器進行著介面的互動,傳參是不可缺少的一部分。後臺返回的j son資料我們可以很好的解析使用,但是我們如何向後臺傳送j son資料的引數呢?要知道,一般伺服器是不允許傳物件的。以下是在專案中遇到的實際問題,在此總結一下,供大家交流。 一. 字典轉字串:
iOS開發之根據按鈕確定點選的section 和row
分組的tableview cell上面有按鈕,根據按鈕確定點選的是哪一組的哪一行。對於初學者來說不好判斷,那麼下面就來跟大家分享一下如何實現吧。 cell 方法裡面新增 [cell.pingjiaBtn addTarget:self action:@selector(didPingJiaBut
iOS開發之根據按鈕確定點擊的section 和row
get ott 實現 事件 oid self. all 初學者 shopping 分組的tableview cell上面有按鈕,根據按鈕確定點擊的是哪一組的哪一行。對於初學者來說不好判斷,那麽下面就來跟大家分享一下如何實現吧。 cell 方法裏面添加 [cell.p
iOS開發知識之:iOS開發中alloc和new的區別
1.在實際開發中很少會用到new,一般建立物件咱們看到的全是[[className alloc] init] 但是並不意味著你不會接觸到new,在一些程式碼中還是會看到[className new], 還有去面試的時候,也很可能被問到這個問題。 2.那麼,他們兩者之間到底有什麼區別呢 我們看原始碼:
有關IOS開發寫的好的部落格和網站(持續更新,含盲點)
1. Swift中的trim方法處理字串:http://www.hangge.com/blog/cache/detail_1649.html 2. Swift語言中的@available和#available https://blog.csdn.net/offbye/article/deta