240 发简信
IP属地:四川
  • 基于 CocoaPods 的组件二进制化实践

    火掌柜 iOS 客户端经过近两年的组件化推进,组件数量已经颇具规模,达到了近 100 个。随着组件数量和代码量越来越多,主工程的打包时间从最初的十几分钟,增加到了现在的四十分...

  • @fcf1c3fe3c6a 我用这个做的是群聊,服务器保存 用户上线拉取。

    MQTT使用小记

    MQTT全称Message Queue Telemetry Transport,是一个针对轻量级的发布/订阅式消息传输场景的协议,同时也是被推崇的物联网传输协议。MQTT详细...

  • 利用策略模式增强图片浏览器的扩展性

    说到图片浏览器,项目中比较常用的成熟框架有Objective-C版本的MWPhotoBrowser,IDMPhotoBrowser或者Swift版本的SKPhotoBrows...

  • 使用AssetsLibrary和PhotoKit做一个简易的相片选择器

    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使用小记

    MQTT全称Message Queue Telemetry Transport,是一个针对轻量级的发布/订阅式消息传输场景的协议,同时也是被推崇的物联网传输协议。MQTT详细...

  • 更加快速地设置Frame

    由于现在手头上的项目是基于frame开发的,没有xib或者storyboard,没有使用自动布局,所以排布界面时总是显得很繁琐。 令人蛋疼的frame布局 老代码对界面的坐标...

  • 在Swift实现Struct归档

    在Swift中,Struct类型是无法进行归档操作的,只有继承自NSObject并且遵守了NSCoding协议的类才可以进行相应的归档操作。也就是将上面结构体改成类: 但是如...

  • Octopress因为Ruby版本出现push不生效问题

    使用Octopress提交改的博客配置,但是发现配置并没有生效,然后本地预览也报以下错误: 上网搜了下资料,已经有人遇到过了Errno::ENOENT: No Such Fi...

个人介绍

简书不再更新

后续更新会记录在我的 Blog:
https://triplecc.github.io/

我的github:
https://github.com/tripleCC