实现原理

block 实现原理详解(一)

穿精又带淫゛_ 提交于 2020-03-02 21:56:36
对于大多数人来讲,block内部到底是怎样实现的呢?我们可以借助clang将其编译成为c++的代码,就可以看出,block到底是什么东西, 先来看这样一个问题, <!-- lang: cpp --> int age = 10; void (^block)() = ^{ NSLog(@"%d",age); }; age = 30; block();//10 以及下面的这一段代码 <!-- lang: cpp --> __block int age = 10; void (^block)() = ^{ NSLog(@"%d",age); }; age = 30; block();//30 你会发现这两个结果是不同的, 第一个输出10,第二个输出的是30 要想知道这里面干了些什么!需要我们将其编译成为C++代码,看下里面到底搞了些什么? 使用终端,转到mian.m文件下,使用如下代码 clang -rewrite-objc main.m 将其编译生成 main.cpp文件 这时候,我们打开mian.cpp便知 在文件的最底下main函数中 <!-- lang: cpp --> int main(int argc, const char * argv[]) { /* @autoreleasepool */ { __AtAutoreleasePool __autoreleasepool; _

Spring查找方法注入(Lookup method injection)的底层实现原理

拟墨画扇 提交于 2019-12-06 16:16:42
美女邀我去歌舞厅娱乐,我拒绝了,我觉得跟技术宅男们分享技术更为重要。 Spring方法注入的概念:一个由容器管理的singleton bean中,需要引入另外一个由容器管理的prototype bean,由于singleton bean只会被创建一次,如何保证singleton bean每次调用时用到的prototype bean一定是prototype的呢(存在prototype被错误注入成singleton的风险)?于是,Spring提供了Method injection(方法注入)和Lookup method injection(查找方法注入),来解决此类问题。 1.错误使用 prototype的例子 public interface Command { public Object execute(); } 再定义一个实现类,prototype类型。 public class AsyncCommand implements Command { @Override public Object execute() { System.out.println("Async command execute."); return "Execute result."; } } 在一个singleton bean中使用该prototype类。 public class Manager {

zg手册 之 python2.7.7源码分析(3)-- list 对象和 dict 对象

被刻印的时光 ゝ 提交于 2019-11-30 05:24:39
list 对象 list 对象的定义 list对象内部是使用数组实现,在数组中存储的是指针,指向要保存的对象。 allocated是list中数组的大小,ob_size是当前已经使用的数组大小。 typedef struct { // 可变长对象中有 ob_size,保存当前已经使用的数组大小 PyObject_VAR_HEAD PyObject **ob_item; // 数组的指针 Py_ssize_t allocated; // 分配的数组长度 } PyListObject; list 对象的缓存 list对象有缓存机制,对象在释放时会保存到空闲缓存池,待下一次申请的时候使用。 缓存池可以缓存80个list对象,缓存池满的时候list对象直接释放。 从list对象的创建和销毁过程了解它的缓存机制(为了关注重点,代码被简化过)。 // 缓存池的大小定义 #define PyList_MAXFREELIST 80 // 创建新的list对象 PyObject* PyList_New(Py_ssize_t size) { PyListObject *op; size_t nbytes = size * sizeof(PyObject *); // 如果缓存有空闲,直接从缓存中分配list对象的内存 if (numfree) { numfree--; op = free_list

AFNetWorking的实现原理

会有一股神秘感。 提交于 2019-11-27 03:27:28
一:简介 在ios开发中,一般情况下,简单的向某个web站点简单的页面提交请求并获取服务器的响应,用xcode自带的NSURLConnection是能胜任的。但是,在绝大部分下我们所需要访问的web页面则是属于那种受到权限保护的页面,并不是有一个简单的URL可以访问的。这就涉及到了Session和Cookie的处理了,在此时使用NSURLConnection也是能够达到要求的,只是其中处理起来的复杂度和难度就提升了。 为了更好的处理向Web站点的请求,包括处理Session,Cookie等细节问题,使用AFNetworking则是更好的选择,他可以用于发送HTTP请求,接收HTTP的响应,但是不会缓存服务器的响应,不能执行HTML页面中的JAvascript代码,同时,AFNetworking还内置支持JSON,plist文件和XML文件的解析,使用比较方便。 扩展:1、Session:中文有译作时域的,就是只某个客户端在访问服务器起到停止访问这一段的时间间隔被称为时域。 2、Cookie:由服务器发送给客服端,把Cookie的key:value值储存在本地文件夹下,当下次请求的时候能够直接发送Cookie获得权限验证 博客源地址: http://386502324.blog.163.com/blog/static/1134693772015522115237696/ 二:综述