深度围观block:第三集
深度围观block:第三集
发布于:2013-07-12 10:09阅读数:7804
本文是深度围观block的第三篇文章,也是最后一篇。希望读者阅读了之后,对block有更加深入的理解,同时也希望之前对汇编语言恐惧或者陌生的读者转变看法,其实只要你用心去看,去学,很
“”

本文由破船译自galloway!
小引
本文是深度围观block的第三篇文章,也是最后一篇。希望读者阅读了之后,对block有更加深入的理解,同时也希望之前对汇编语言恐惧或者陌生的读者转变看法,其实只要你用心去看,去学,很容易就搞懂的。

- #define Block_copy(...) ((__typeof(__VA_ARGS__))_Block_copy((const void *)(__VA_ARGS__)))
- void *_Block_copy(const void *arg);
- void *_Block_copy(const void *arg) {
- return _Block_copy_internal(arg, WANTS_ONE);
- }
- static void *_Block_copy_internal(const void *arg, const int flags) {
- struct Block_layout *aBlock;
- const bool wantsOne = (WANTS_ONE & flags) == WANTS_ONE;
- // 1
- if (!arg) return NULL;
- // 2
- aBlock = (struct Block_layout *)arg;
- // 3
- if (aBlock->flags & BLOCK_NEEDS_FREE) {
- // latches on high
- latching_incr_int(&aBlock->flags);
- return aBlock;
- }
- // 4
- else if (aBlock->flags & BLOCK_IS_GLOBAL) {
- return aBlock;
- }
- // 5
- struct Block_layout *result = malloc(aBlock>descriptor->size);
- if (!result) return (void *)0;
- // 6
- memmove(result, aBlock, aBlock->descriptor->size); // bitcopy first
- // 7
- result->flags &= ~(BLOCK_REFCOUNT_MASK); // XXX not needed
- result->flags |= BLOCK_NEEDS_FREE | 1;
- // 8
- result->isa = _NSConcreteMallocBlock;
- // 9
- if (result->flags & BLOCK_HAS_COPY_DISPOSE) {
- (*aBlock->descriptor->copy)(result, aBlock); // do fixup
- }
- return result;
- }
- #define Block_release(...) _Block_release((const void *)(__VA_ARGS__))
- void _Block_release(void *arg) {
- // 1
- struct Block_layout *aBlock = (struct Block_layout *)arg;
- if (!aBlock) return;
- // 2
- int32_t newCount;
- newCount = latching_decr_int(&aBlock->flags) & BLOCK_REFCOUNT_MASK;
- // 3
- if (newCount > 0) return;
- // 4
- if (aBlock->flags & BLOCK_NEEDS_FREE) {
- if (aBlock->flags & BLOCK_HAS_COPY_DISPOSE)(*aBlock->descriptor->dispose)(aBlock);
- _Block_deallocator(aBlock);
- }
- // 5
- else if (aBlock->flags & BLOCK_IS_GLOBAL) {
- ;
- }
- // 6
- else {
- printf("Block_release called upon a stack Block: %p, ignored\n", (void *)aBlock);
- }
- }
CocoaChina是全球最大的苹果开发中文社区,官方微信每日定时推送各种精彩的研发教程资源和工具,介绍app推广
深度围观block:第三集的更多相关文章
- UFLDL深度学习笔记 (三)无监督特征学习
UFLDL深度学习笔记 (三)无监督特征学习 1. 主题思路 "UFLDL 无监督特征学习"本节全称为自我学习与无监督特征学习,和前一节softmax回归很类似,所以本篇笔记会比较 ...
- 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. 一.前言 网络优化解决的核心问题有三个 ...
- 最全的机器学习&深度学习入门视频课程集
资源介绍 链接:http://pan.baidu.com/s/1kV6nWJP 密码:ryfd 链接:http://pan.baidu.com/s/1dEZWlP3 密码:y82m 更多资源 ...
- 我厌倦了 Redux,那就造个轮子 Rectx:第三集
仓库:215566435/rectx 前言 麻烦快去我的仓库里面喷: 老子学不动了,求不要更新. 呵呵,你没想到吧,这玩意儿竟然有第三集!我靠,我自己都没想到,让我们悄悄的回顾一下前两集完全没想到,竟 ...
- [深度学习] Pytorch(三)—— 多/单GPU、CPU,训练保存、加载模型参数问题
[深度学习] Pytorch(三)-- 多/单GPU.CPU,训练保存.加载预测模型问题 上一篇实践学习中,遇到了在多/单个GPU.GPU与CPU的不同环境下训练保存.加载使用使用模型的问题,如果保存 ...
- SpringBoot第三集:热部署与单元测试(2020最新最易懂)
SpringBoot第三集:热部署与单元测试(2020最新最易懂) 有兴趣的可以先参考附录简单了解SpringBoot自动装配流程. 一.SpringBoot开发热部署 项目开发中,你是否也遇到更新配 ...
- SIGAI深度学习第三集 人工神经网络2
讲授神经网络的理论解释.实现细节包括输入与输出值的设定.网络规模.激活函数.损失函数.初始化.正则化.学习率的设定.实际应用等 大纲: 实验环节: 理论层面的解释:两个方面,1.数学角度,映射函数h( ...
- 深度学习笔记(三 )Constitutional Neural Networks
一. 预备知识 包括 Linear Regression, Logistic Regression和 Multi-Layer Neural Network.参考 http://ufldl.stanfo ...
- 深度学习基础(三)NIN_Network In Network
该论文提出了一种新颖的深度网络结构,称为"Network In Network"(NIN),以增强模型对感受野内local patches的辨别能力.与传统的CNNs相比,NIN主 ...
随机推荐
- Flatten Binary Tree to Linked List ——LeetCode
Given a binary tree, flatten it to a linked list in-place. For example,Given 1 / \ 2 5 / \ \ 3 4 6 T ...
- 【转】C#读取文件时的共享方式
string sFileName = @"C:\Exchange.dat";System.IO.StreamReader file = new System.IO.StreamRe ...
- PCRE
http://blog.sina.com.cn/s/blog_6a1837e901010ckv.html http://hubeihuyanwei.blog.163.com/blog/static/2 ...
- 297 - Quadtrees (UVa)
Quadtrees A quadtree is a representation format used to encode images. The fundamental idea behind t ...
- python:文本文件处理
# coding=utf-8 #将列表写入文件 :'w+'(覆盖原有文件内容),'a+'(在原文件的基础上追加) def write_list_test(path,savelist,pattarn): ...
- 中国四大资产管理公司 ACM
一,来历和主要业务 国家于1999年成立了四家直属国务院的资产管理公司:中国东方资产管理公司.中国信达资产管理公司.中国华融资产管理公司.中国长城资产管理公司.由于资产公司一般是是为适应体制转轨或防范 ...
- DB2 递归
公司一直用递归来生成组织机构的树状图.看了上面的文档,应该立马就能写了. 不过前几天,有个功能涉及到下面的状况: 需要组织机构等级为1级的下面所有子机构.且按照一级组织机构分组.大家都觉得很难,哥就一 ...
- 在终端(Terminal)里用命令行进行数学运算
有时候我们进行一些数学运算,我们会去开系统自带的计算来做这件事情,其实我们也可以直接在终端里面用命令行进行的. 在命令行里敲 bc 进入数学计算模式,然后随便输入数学表达式 回车 ,结果就出来了,是不 ...
- linux杂谈(二十):apache服务配置
1.apache简单介绍 我们常常要浏览网页,提供这种服务是apache.提供apache服务的软件是httpd服务. Apache支持許多特性,大部分通过编译的模块实现.這些特性從伺服器 ...
- [Redux] Reducer Composition with combineReducers()
Previous, we do composition with objects: const todoApp = (state = {}, action) => { return { todo ...