深度围观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主 ...
随机推荐
- 自定义AuthorizeAttribute
原文地址:http://www.cnblogs.com/shanyou/archive/2010/03/29/1699511.html 网站的权限判断是一个非常普遍的需求,从文章ASP.NET MVC ...
- Semaphore — Windows API
Semaphore是旗语的意思,在Windows中,Semaphore对象用来控制对资源的并发访问数.Semaphore对象具有一个计数值,当值大于0时,Semaphore被置信号,当计数值等于0时, ...
- webservice2-wsimport的使用
打开Eclipse,新建java项目,service_start cmd下运行wsimport(要配置jdk的环境变量,wsimport在JAVA_HOME/bin下) wsimport -d d:/ ...
- sql server 扩展存储过程
C# 代码 using Microsoft.SqlServer.Server; using System; using System.Collections.Generic; using System ...
- NSURLConnection获取数据
- (void)loadDataFromUrl { NSURL* url = [NSURL URLWithString:@"http://m.weather.com.cn/data/1011 ...
- Sublime Text 2.0.2 注册码
Sublime Text 2.0.2 注册码 直接输入注册码就可以了----- BEGIN LICENSE -----Andrew WeberSingle User LicenseEA7E-85560 ...
- 解决Item控件抢占焦点
http://www.imooc.com/learn/372 在抢占焦点的控件加上 方法一: android:focusable="false" 方法二: 在外界布局上 andro ...
- Android Dialog AlertDialog
1.普通的对话框 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" andro ...
- [RxJS] Creation operators: interval and timer
It is quite common to need an Observable that ticks periodically, for instance every second or every ...
- Android四大组件——Service
Service相关链接 Service初涉 Service进阶 Service精通 Service是Android系统中的一种组件,它跟Activity的级别差不多,但是它不能自己运行,只能后台运行, ...