火掌柜 iOS 客户端经过近两年的组件化推进,组件数量已经颇具规模,达到了近 100 个。随着组件数量和代码量越来越多,主工程的打包时间从最初的十几分钟,增加到了现在的四十分...
@fcf1c3fe3c6a 我用这个做的是群聊,服务器保存 用户上线拉取。
MQTT使用小记MQTT全称Message Queue Telemetry Transport,是一个针对轻量级的发布/订阅式消息传输场景的协议,同时也是被推崇的物联网传输协议。MQTT详细...
说到图片浏览器,项目中比较常用的成熟框架有Objective-C版本的MWPhotoBrowser,IDMPhotoBrowser或者Swift版本的SKPhotoBrows...
iOS8之后,苹果推出了PhotoKit,让开发者在处理相册相关的业务时,可以更加得心应手。github上的开发者针对PhotoKit做了一层很优秀的封装CTAssetsPi...
@半块 嗯,是的,我关于这一块的内容都只是创建了block,并没有调用。
Block技巧与底层解析目录 Block底层解析什么是block?block编译转换结构block实际结构block的类型NSConcreteGlobalBlock和NSConcreteStackB...
@OldSix1987 嗯,多谢提醒。
这里我后面也指明了《可以看到,block`复制`时,会retain捕捉对象,以增加其引用计数。》,也就是在copy block时会retain捕捉对象,可能写的不太清晰吧。
还有《oc对象的引用计数器不会+1,源码调用了block_retain,但是里面什么也没做》这里我不是很同意。你说的代码应该是下面这一部分吧:
******************************************
// 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里面实际上并没有执行真正有效的代码,在默认和GC情况都是。不过我感觉下面一段代码可能会改变里面的动作:
******************************************
void _Block_use_RR( void (*retain)(const void *),
void (*release)(const void *)) {
_Block_retain_object = retain;
_Block_release_object = release;
}
******************************************
从block的copy来看,确实会有retain的动作,所以我猜测可能有这样一段代码:
******************************************
// ESBlockRuntime的实现
_Block_use_RR( (retain)&CFRetain, &CFRelease );
******************************************
指定了_Block_retain_object的动作,实际上是有进行retain的,只是我没有对block进行copy动作,也就没有调用_Block_object_assign函数。
以上是我的一些粗略的看法==
Block技巧与底层解析目录 Block底层解析什么是block?block编译转换结构block实际结构block的类型NSConcreteGlobalBlock和NSConcreteStackB...
MQTT全称Message Queue Telemetry Transport,是一个针对轻量级的发布/订阅式消息传输场景的协议,同时也是被推崇的物联网传输协议。MQTT详细...
由于现在手头上的项目是基于frame开发的,没有xib或者storyboard,没有使用自动布局,所以排布界面时总是显得很繁琐。 令人蛋疼的frame布局 老代码对界面的坐标...
在Swift中,Struct类型是无法进行归档操作的,只有继承自NSObject并且遵守了NSCoding协议的类才可以进行相应的归档操作。也就是将上面结构体改成类: 但是如...
使用Octopress提交改的博客配置,但是发现配置并没有生效,然后本地预览也报以下错误: 上网搜了下资料,已经有人遇到过了Errno::ENOENT: No Such Fi...