本文是本人自己辛苦翻譯的片效,請轉(zhuǎn)載的朋友注明,翻譯于Z.MJun的簡書 英古,感謝淀衣!<翻譯不容易啊>
完成翻譯于2016年5月18日
Managing Dispatch Objects管理調(diào)度對象
GCD提供了一些允許應(yīng)用管理的接口。如內(nèi)存管理召调,暫停膨桥,回復(fù)執(zhí)行,定義對象唠叛,記錄任務(wù)數(shù)據(jù)只嚣。調(diào)度對象必須是手動(dòng)保留和手動(dòng)釋放,沒有自動(dòng)回收機(jī)制艺沼。
dispatch_debug
- 描述:以編程方式記錄一個(gè)調(diào)度對象信息册舞。
- 方法:
void dispatch_debug( dispatch_object_t object, const char *message, ...)
- 參數(shù):
-
object
Object對象 -
message
這是Printf風(fēng)格形式String。消息的內(nèi)容以冒號分割
-
- 調(diào)試信息會(huì)記錄到控制臺(tái)信息里面障般。當(dāng)對象使用
dispatch_debug
時(shí)候调鲸,這個(gè)信息很有用,就像使用調(diào)試工具來查看網(wǎng)絡(luò)狀態(tài)一樣挽荡。
dispatch_get_context
- 描述:返回對象的默認(rèn)內(nèi)容
- 方法:
void * dispatch_get_context( dispatch_object_t object)
- 參數(shù):
-
object
這個(gè)參數(shù)也不能為NULL
-
- 對象可以在應(yīng)用里關(guān)聯(lián)一些用戶的數(shù)據(jù)藐石。您的應(yīng)用需要適當(dāng)?shù)谋A艋蛘哚尫艛?shù)據(jù)。
釋放 dispatch_release
描述:釋放調(diào)度對象定拟。
方法:
void dispatch_release( dispatch_object_t object)
參數(shù):
+object
對象會(huì)被釋放于微,這個(gè)參數(shù)也不能為NULL-
當(dāng)所有引用被釋放,這個(gè)調(diào)度對象就馬上會(huì)異步的釋放青自。這個(gè)引用計(jì)數(shù)變成0株依。當(dāng)你的應(yīng)用不再需要一個(gè)自己創(chuàng)建的調(diào)度對象,你需要調(diào)用這個(gè)方法來釋放他性穿,釋放內(nèi)存勺三。需要注意的是雷滚,GCD不保證一個(gè)提供給客戶端擁有最后或者唯一一個(gè)引用給對象需曾。
Important
如果你的應(yīng)用系統(tǒng)目標(biāo)是OS X10.8及以上,或者IOS 6.0及以上,調(diào)度隊(duì)列是使用ARC自動(dòng)釋放機(jī)制管理的呆万,所以你不需要保留或者釋放調(diào)度隊(duì)列商源。
為了更好地兼容已經(jīng)存在的代碼,這個(gè)是基礎(chǔ)配置的谋减。跟多細(xì)節(jié)在Dispatch Queues and Automatic Reference Counting -
你的引用不需要保留和釋放全局調(diào)度隊(duì)列牡彻,如果在全局調(diào)度隊(duì)列上使用這個(gè)方法是無效的
Important
平衡
dispatch_suspend
和dispatch_resume
是很重要的。以至于調(diào)度對象當(dāng)最后一個(gè)引用被被釋放出爹,所有的調(diào)度對象都會(huì)被完全恢復(fù)庄吼。當(dāng)釋放了最后的引用,調(diào)度對象的掛起狀態(tài)會(huì)被解除严就。
恢復(fù) dispatch_resume
- 描述:恢復(fù)一個(gè)調(diào)度對象
- 方法:
void dispatch_resume( dispatch_object_t object)
- 參數(shù):
-
object
這個(gè)對象將會(huì)被恢復(fù)总寻,這個(gè)參數(shù)也不能為NULL
-
- 調(diào)用這個(gè)方法,會(huì)減少一個(gè)掛起的調(diào)度隊(duì)列或者調(diào)度事件源對象的計(jì)數(shù)梢为。知道計(jì)數(shù)大于0渐行,這個(gè)對象才會(huì)繼續(xù)掛起。當(dāng)掛起的計(jì)數(shù)為0铸董,任何調(diào)度隊(duì)列或者任何調(diào)度源監(jiān)控時(shí)間都會(huì)被掛起祟印。
- 有一個(gè)例外,每個(gè)調(diào)用
dispatch_resume
必須平衡的使用dispatch_suspend
粟害。新的調(diào)度事件源對象返回蕴忆,dispatch_source_create
有一個(gè)掛起計(jì)數(shù)為1和在事件交付前必須恢復(fù)。這個(gè)方法允許你的應(yīng)用完全配置調(diào)度事件源對象優(yōu)先于第一個(gè)時(shí)間掛起我磁。在其他事件里孽文,沒有定義dispatch_resume
要比dispatch_suspend
多,這將產(chǎn)生負(fù)的掛起計(jì)數(shù)夺艰。
保留 dispatch_retain
- 描述:保留一個(gè)調(diào)度對象
- 方法:void dispatch_retain( dispatch_object_t object)`
- 參數(shù):
-
object
這個(gè)對象將會(huì)保留芋哭,這個(gè)參數(shù)也不能為NULL
-
- 調(diào)用這個(gè)方法,也需要調(diào)用
dispatch_release
郁副。如果子多個(gè)系統(tǒng)使用到了這個(gè)調(diào)度對象减牺,子系統(tǒng)就會(huì)使用dispatch_retain
的方法來保留對象。這個(gè)對象只有當(dāng)所有的子系統(tǒng)釋放了存谎,他才會(huì)被釋放拔疚。
值得注意的是,你的應(yīng)用不需要管理(保留和釋放)全局調(diào)度隊(duì)列既荚。Important
如果你的應(yīng)用系統(tǒng)目標(biāo)是OS X10.8及以上稚失,或者IOS 6.0及以上,調(diào)度隊(duì)列是使用ARC自動(dòng)釋放機(jī)制管理的恰聘,所以你不需要保留或者釋放調(diào)度隊(duì)列句各。
為了更好地兼容已經(jīng)存在的代碼吸占,這個(gè)是基礎(chǔ)配置的。跟多細(xì)節(jié)在Dispatch Queues and Automatic Reference Counting
dispatch_set_context
- 描述:關(guān)聯(lián)一個(gè)配置信息到對象里
- 方法:
void dispatch_set_context( dispatch_object_t object, void *context)
- 參數(shù):
-
object
這個(gè)參數(shù)也不能為NULL -
context
傳給系統(tǒng)的內(nèi)容參數(shù)凿宾,這個(gè)參數(shù)也不能為NULL
-
- 應(yīng)用可以關(guān)聯(lián)自定義內(nèi)容給這個(gè)對象矾屯。你的應(yīng)用必須適當(dāng)?shù)谋A艉歪尫胚@個(gè)數(shù)據(jù)。
dispatch_set_finalizer_f
- 描述:為調(diào)度對象設(shè)置終結(jié)器功能初厚。
- 方法:
void dispatch_set_finalizer_f( dispatch_object_t object, dispatch_function_t finalizer)
- 參數(shù):
-
object
可修改的調(diào)度對象件蚕, 這個(gè)參數(shù)也不能為NULL -
finalizer
dispatch_function_t
對象
-
- 當(dāng)所有的引用對象被釋后,調(diào)度對象就會(huì)調(diào)用這個(gè)方法产禾。應(yīng)用可以使用
finalizer
來釋放任何關(guān)聯(lián)對象的資源排作。
掛起 dispatch_suspend
- 描述:掛起一個(gè)調(diào)度對象。
- 方法:
void dispatch_suspend( dispatch_object_t object)
- 參數(shù):
-
object
將要掛起的對象亚情, 這個(gè)參數(shù)也不能為NULL
-
- 掛起一個(gè)調(diào)度對象纽绍,應(yīng)用可以臨時(shí)暫挺關(guān)聯(lián)這個(gè)對象的Block執(zhí)行。中止任何運(yùn)行中的block势似。調(diào)用這個(gè)方法會(huì)增加掛起計(jì)數(shù)對象拌夏。和調(diào)用
dispatch_resume
會(huì)減少他。當(dāng)這個(gè)計(jì)數(shù)超過0履因,這個(gè)對象保持掛起障簿,所以你必須合理把dispatch_suspend
和dispatch_resume
對應(yīng)起來。 - 當(dāng)對象回復(fù)栅迄,調(diào)度隊(duì)列或者調(diào)度源都會(huì)繼續(xù)運(yùn)作站故。