近期更新了xcode至xcode12.2版本役拴,運行老項目次乓,會報You don’t have permission. To view or change permissions...
《2018 iOS面試題系列》 一匀油、多線程的底層實現(xiàn)? 提示:1> 首先搞清楚什么是線程勾笆、什么是多線程2>Mach是第一個以多線程方式處理任務的系統(tǒng)敌蚜,因此多線程的底層實現(xiàn)機制...
特意登錄點贊
使用atomic一定是線程安全的嗎?這個問題很少遇到匠襟,但是答案當然不是钝侠。atomic在set方法里加了鎖该园,防止了多線程一直去寫這個property酸舍,造成難以預計的數(shù)值帅韧。但這也只是讀寫的鎖定。跟線程安全其實還是差...
po主理解錯了啃勉。atomic是絕對安全的忽舟。
我們知道,在64位的操作系統(tǒng)下淮阐,所有類型的指針叮阅,包括void * 都是占用8個字節(jié)的。超過4個字節(jié)的基本類型數(shù)據(jù)都會有線程并發(fā)的問題泣特。
那所有的指針類型都會有這個問題浩姥。
以oc 下的 NSArray * 為例子,如果一個多線程操作這個數(shù)據(jù)状您,會有兩個層級的并發(fā)問題
1勒叠、指針本身
2、指針所指向的內(nèi)存
指針本身也是占用內(nèi)存的膏孟,并且一定是8個字節(jié)眯分,第二部分,指針所指向的內(nèi)存柒桑,這個占多少字節(jié)就不一定了弊决,有可能非常大,有可能也就1個字節(jié)
所以我們考慮NSArray * array 這個數(shù)據(jù)array 多線程操作的時候魁淳,必須分成兩部分來描述飘诗,一個是&array這個指針本身,另一個則是它所指向的內(nèi)存 array
大家注意下 &array 和 array 的區(qū)別 界逛,其實不用糾結昆稿,你就想象現(xiàn)在有兩塊內(nèi)存,一塊是8字節(jié)仇奶,一塊n字節(jié)貌嫡,8字節(jié)里面放的值,就是n字節(jié)內(nèi)存的首地址该溯,
ok 現(xiàn)在聯(lián)系上atomic岛抄,如果用@property(atomic)NSArray *array 修飾之后,會有什么影響狈茉?網(wǎng)上說的很多夫椭,不再贅述,我只想從內(nèi)存的角度來解釋這個過程
首先第一點氯庆,你要記住蹭秋,@property(atomic)NSArray *array 其實修飾的是這個指針扰付,也就是這個8字節(jié)內(nèi)存,跟第二部分數(shù)據(jù)n字節(jié)沒有任何關系仁讨,被atomic 修飾之后羽莺,你不可能隨意去多線程操作這個8字節(jié),但是對8字節(jié)里面所指向的n字節(jié)沒有任何限制洞豁!這就是所有網(wǎng)絡上所說的 atomic 不安全的真相 Q喂獭!丈挟!
我們來看一下刁卜,這能怪atomic? 本身你修飾的是一個指針曙咽,并且atomic 已經(jīng)完美的履行了它的指責蛔趴,你現(xiàn)在不可能對這個8字節(jié)進行無序的多線程操作,這就夠了呀例朱!atomic沒有任何鳥問題孝情。有問題的是人,你本身并未對n字節(jié)做任何的限制茉继,所以把問題怪罪到atomic 上真的是很不合理
之前公司項目需要派撕,研究了一下人臉識別和活體識別婉弹,并運用免費的訊飛人臉識別,在其基礎上做了二次開發(fā)终吼,添加了活體識別镀赌。項目需要就開發(fā)了張嘴和搖頭兩個活體動作的識別。 這里簡...
一 初識 dispatch_semaphore_t signal 二 實戰(zhàn):利用 dispatch_semaphore_t signal 組織一個并發(fā)數(shù)是10 的一個多線程工...
Django中提示TemplateDoesNotExist解決 嘗試了配置DIRS為絕對路徑等方法际跪,均無效商佛,之后改為空,親測bug消失 在settings.py中找到 TEM...