火掌柜 iOS 客戶端經(jīng)過近兩年的組件化推進(jìn),組件數(shù)量已經(jīng)頗具規(guī)模,達(dá)到了近 100 個(gè)。隨著組件數(shù)量和代碼量越來越多,主工程的打包時(shí)間從最初的十幾分鐘,增加到了現(xiàn)在的四十分...
@fcf1c3fe3c6a 我用這個(gè)做的是群聊,服務(wù)器保存 用戶上線拉取。
MQTT使用小記MQTT全稱Message Queue Telemetry Transport,是一個(gè)針對輕量級的發(fā)布/訂閱式消息傳輸場景的協(xié)議,同時(shí)也是被推崇的物聯(lián)網(wǎng)傳輸協(xié)議。MQTT詳細(xì)...
說到圖片瀏覽器,項(xiàng)目中比較常用的成熟框架有Objective-C版本的MWPhotoBrowser,IDMPhotoBrowser或者Swift版本的SKPhotoBrows...
iOS8之后,蘋果推出了PhotoKit,讓開發(fā)者在處理相冊相關(guān)的業(yè)務(wù)時(shí),可以更加得心應(yīng)手。github上的開發(fā)者針對PhotoKit做了一層很優(yōu)秀的封裝CTAssetsPi...
@半塊 嗯,是的,我關(guān)于這一塊的內(nèi)容都只是創(chuàng)建了block,并沒有調(diào)用。
Block技巧與底層解析目錄 Block底層解析什么是block?block編譯轉(zhuǎn)換結(jié)構(gòu)block實(shí)際結(jié)構(gòu)block的類型NSConcreteGlobalBlock和NSConcreteStackB...
@OldSix1987 嗯,多謝提醒。
這里我后面也指明了《可以看到,block`復(fù)制`時(shí),會retain捕捉對象,以增加其引用計(jì)數(shù)?!?,也就是在copy block時(shí)會retain捕捉對象,可能寫的不太清晰吧。
還有《oc對象的引用計(jì)數(shù)器不會+1,源碼調(diào)用了block_retain,但是里面什么也沒做》這里我不是很同意。你說的代碼應(yīng)該是下面這一部分吧:
******************************************
// 1
static void _Block_assign_default(void *value, void **destptr) {
*destptr = value;
}
static void (*_Block_retain_object)(const void *ptr) = _Block_retain_object_default;
// 2
void _Block_use_GC( void *(*alloc)(const unsigned long, const bool isOne, const bool isObject),
void (*setHasRefcount)(const void *, const bool),
void (*gc_assign)(void *, void **),
void (*gc_assign_weak)(const void *, void *),
void (*gc_memmove)(void *, void *, unsigned long)) {
…
_Block_retain_object = _Block_do_nothing;
_Block_release_object = _Block_do_nothing;
_Block_assign_weak = gc_assign_weak;
_Block_memmove = gc_memmove;
}
******************************************
上面部分代碼都表明_Block_retain_object里面實(shí)際上并沒有執(zhí)行真正有效的代碼,在默認(rèn)和GC情況都是。不過我感覺下面一段代碼可能會改變里面的動作:
******************************************
void _Block_use_RR( void (*retain)(const void *),
void (*release)(const void *)) {
_Block_retain_object = retain;
_Block_release_object = release;
}
******************************************
從block的copy來看,確實(shí)會有retain的動作,所以我猜測可能有這樣一段代碼:
******************************************
// ESBlockRuntime的實(shí)現(xiàn)
_Block_use_RR( (retain)&CFRetain, &CFRelease );
******************************************
指定了_Block_retain_object的動作,實(shí)際上是有進(jìn)行retain的,只是我沒有對block進(jìn)行copy動作,也就沒有調(diào)用_Block_object_assign函數(shù)。
以上是我的一些粗略的看法==
Block技巧與底層解析目錄 Block底層解析什么是block?block編譯轉(zhuǎn)換結(jié)構(gòu)block實(shí)際結(jié)構(gòu)block的類型NSConcreteGlobalBlock和NSConcreteStackB...
由于現(xiàn)在手頭上的項(xiàng)目是基于frame開發(fā)的,沒有xib或者storyboard,沒有使用自動布局,所以排布界面時(shí)總是顯得很繁瑣。 令人蛋疼的frame布局 老代碼對界面的坐標(biāo)...
在Swift中,Struct類型是無法進(jìn)行歸檔操作的,只有繼承自NSObject并且遵守了NSCoding協(xié)議的類才可以進(jìn)行相應(yīng)的歸檔操作。也就是將上面結(jié)構(gòu)體改成類: 但是如...
使用Octopress提交改的博客配置,但是發(fā)現(xiàn)配置并沒有生效,然后本地預(yù)覽也報(bào)以下錯(cuò)誤: 上網(wǎng)搜了下資料,已經(jīng)有人遇到過了Errno::ENOENT: No Such Fi...