![240](https://cdn2.jianshu.io/assets/default_avatar/10-e691107df16746d4a9f3fe9496fd1848.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/240/h/240)
火掌柜 iOS 客戶端經(jīng)過近兩年的組件化推進(jìn)夜赵,組件數(shù)量已經(jīng)頗具規(guī)模,達(dá)到了近 100 個。隨著組件數(shù)量和代碼量越來越多,主工程的打包時間從最初的十幾分鐘,增加到了現(xiàn)在的四十分...
@fcf1c3fe3c6a 我用這個做的是群聊,服務(wù)器保存 用戶上線拉取复亏。
MQTT使用小記MQTT全稱Message Queue Telemetry Transport趾娃,是一個針對輕量級的發(fā)布/訂閱式消息傳輸場景的協(xié)議,同時也是被推崇的物聯(lián)網(wǎng)傳輸協(xié)議缔御。MQTT詳細(xì)...
說到圖片瀏覽器抬闷,項目中比較常用的成熟框架有Objective-C版本的MWPhotoBrowser,IDMPhotoBrowser或者Swift版本的SKPhotoBrows...
iOS8之后,蘋果推出了PhotoKit笤成,讓開發(fā)者在處理相冊相關(guān)的業(yè)務(wù)時评架,可以更加得心應(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ù)制`時塘砸,會retain捕捉對象节仿,以增加其引用計數(shù)〉羰撸》廊宪,也就是在copy block時會retain捕捉對象,可能寫的不太清晰吧女轿。
還有《oc對象的引用計數(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)在手頭上的項目是基于frame開發(fā)的疗绣,沒有xib或者storyboard,沒有使用自動布局铺韧,所以排布界面時總是顯得很繁瑣多矮。 令人蛋疼的frame布局 老代碼對界面的坐標(biāo)...
在Swift中工窍,Struct類型是無法進(jìn)行歸檔操作的割卖,只有繼承自NSObject并且遵守了NSCoding協(xié)議的類才可以進(jìn)行相應(yīng)的歸檔操作。也就是將上面結(jié)構(gòu)體改成類: 但是如...
使用Octopress提交改的博客配置患雏,但是發(fā)現(xiàn)配置并沒有生效鹏溯,然后本地預(yù)覽也報以下錯誤: 上網(wǎng)搜了下資料,已經(jīng)有人遇到過了Errno::ENOENT: No Such Fi...