事先說好 ?前不久看到 @sunnyxx 想找一個(gè)性取向正常的實(shí)習(xí)生幫他分擔(dān)一點(diǎn)工作量,當(dāng)想起他和 @ibireme 秀的親密自拍后我就知道事情并沒有這么簡(jiǎn)單→_→。但是作為...
事先說好 ?前不久看到 @sunnyxx 想找一個(gè)性取向正常的實(shí)習(xí)生幫他分擔(dān)一點(diǎn)工作量,當(dāng)想起他和 @ibireme 秀的親密自拍后我就知道事情并沒有這么簡(jiǎn)單→_→。但是作為...
po主理解錯(cuò)了。atomic是絕對(duì)安全的。
我們知道,在64位的操作系統(tǒng)下,所有類型的指針,包括void * 都是占用8個(gè)字節(jié)的。超過4個(gè)字節(jié)的基本類型數(shù)據(jù)都會(huì)有線程并發(fā)的問題。
那所有的指針類型都會(huì)有這個(gè)問題。
以oc 下的 NSArray * 為例子,如果一個(gè)多線程操作這個(gè)數(shù)據(jù),會(huì)有兩個(gè)層級(jí)的并發(fā)問題
1、指針本身
2、指針?biāo)赶虻膬?nèi)存
指針本身也是占用內(nèi)存的,并且一定是8個(gè)字節(jié),第二部分,指針?biāo)赶虻膬?nèi)存,這個(gè)占多少字節(jié)就不一定了,有可能非常大,有可能也就1個(gè)字節(jié)
所以我們考慮NSArray * array 這個(gè)數(shù)據(jù)array 多線程操作的時(shí)候,必須分成兩部分來描述,一個(gè)是&array這個(gè)指針本身,另一個(gè)則是它所指向的內(nèi)存 array
大家注意下 &array 和 array 的區(qū)別 ,其實(shí)不用糾結(jié),你就想象現(xiàn)在有兩塊內(nèi)存,一塊是8字節(jié),一塊n字節(jié),8字節(jié)里面放的值,就是n字節(jié)內(nèi)存的首地址,
ok 現(xiàn)在聯(lián)系上atomic,如果用@property(atomic)NSArray *array 修飾之后,會(huì)有什么影響?網(wǎng)上說的很多,不再贅述,我只想從內(nèi)存的角度來解釋這個(gè)過程
首先第一點(diǎn),你要記住,@property(atomic)NSArray *array 其實(shí)修飾的是這個(gè)指針,也就是這個(gè)8字節(jié)內(nèi)存,跟第二部分?jǐn)?shù)據(jù)n字節(jié)沒有任何關(guān)系,被atomic 修飾之后,你不可能隨意去多線程操作這個(gè)8字節(jié),但是對(duì)8字節(jié)里面所指向的n字節(jié)沒有任何限制!這就是所有網(wǎng)絡(luò)上所說的 atomic 不安全的真相 ?。?!
我們來看一下,這能怪atomic? 本身你修飾的是一個(gè)指針,并且atomic 已經(jīng)完美的履行了它的指責(zé),你現(xiàn)在不可能對(duì)這個(gè)8字節(jié)進(jìn)行無序的多線程操作,這就夠了呀!atomic沒有任何鳥問題。有問題的是人,你本身并未對(duì)n字節(jié)做任何的限制,所以把問題怪罪到atomic 上真的是很不合理
大江山嵐_f450 評(píng)論自使用atomic一定是線程安全的嗎?
四步走: 一、封裝自己的輪子 創(chuàng)建自己的工程,編寫代碼。 pod lib create 工程名稱 給自己的項(xiàng)目打上tag git tag -a 0.0.1 -m 'relea...
注:歡迎大家可以關(guān)-注 Wei-Xin 公-眾-號(hào) :Style月月專欄,與簡(jiǎn)書同步更新~ Swift-進(jìn)階 01:Swift源碼編譯[https://www.jianshu...
花時(shí)間寫了個(gè)Demo,包含比較全面從UIView,UILabel,UIImageView的自適應(yīng)到UITextView,UITableView,UICollectionVie...
有時(shí)候我們需要直接獲取到當(dāng)前顯示的UINavigationController,以便于后續(xù)操作,獲取方法如下。此方法可以獲取present出來的UINavigationCon...
很多人弄不懂這四個(gè)名詞,網(wǎng)上也有很多的誤導(dǎo)。對(duì)于線程死鎖更是解釋的五花八門、煞有介事的樣子。 一.引出此文的元兇---網(wǎng)上的曲解 經(jīng)過我的代碼驗(yàn)證,事實(shí)是只寫: 也會(huì)造成死鎖...
本文章所使用的微信sdk版本為1.8.6。 UniversalLink配置的問題 首先是配置app的UniversalLink這里有配置教程https://www.jians...
作為一個(gè)資深(自認(rèn)為)iOS程序猿,會(huì)經(jīng)常用到輪播圖,但是總是感覺自己實(shí)現(xiàn)要比直接用別人的要方便一點(diǎn),并且有一些需求需要深度定制,于是想著自己封裝一個(gè)可以定制化的輪播圖庫JC...