1、@synchronized
當(dāng)@synchronized中的代碼正在執(zhí)行時(shí)谎碍,self.downloadtasks不允許被改變
1)@synchronized 的作用是創(chuàng)建一個(gè)互斥鎖鳞滨,保證此時(shí)沒有其它線程對(duì)self對(duì)象進(jìn)行修改。這個(gè)是objective-c的一個(gè)鎖定令牌蟆淀,防止self對(duì)象在同一時(shí)間內(nèi)被其它線程訪問拯啦,起到線程的保護(hù)作用。?
2)在多線程中操作一個(gè)類的屬性時(shí)熔任,不使用synchronized可能會(huì)導(dǎo)致程序崩潰褒链。
2、dispatch_once
單例的創(chuàng)建
1)函數(shù)void dispatch_once( dispatch_once_t *predicate, dispatch_block_t block);其中第一個(gè)參數(shù)predicate疑苔,該參數(shù)是檢查后面第二個(gè)參數(shù)所代表的代碼塊是否被調(diào)用的謂詞甫匹,第二個(gè)參數(shù)則是在整個(gè)應(yīng)用程序中只會(huì)被調(diào)用一次的代碼塊。dispach_once函數(shù)中的代碼塊只會(huì)被執(zhí)行一次惦费,而且還是線程安全的兵迅。