“句柄”是用来操作某个“对象/资源,即:操作某个目标””的,那么“句柄”到底是什么意思啊?释放句柄又怎么解释?
回复内容:
“句柄”是用来操作某个“对象/资源,即:操作某个目标””的,那么“句柄”到底是什么意思啊?释放句柄又怎么解释?
对象就比如你对象,句柄就好比你对象的手机号码,你不必时时刻刻关心你对象在哪里干嘛,你只要有需要的时候打ta电话就能找到,连释放的时候都可以一个电话说:我们分手了。
句柄
英文单词为handle
。
句柄,就是回调函数。
句柄
(handle)在语义上可以理解为把手
。用这个把手,可以得到资源。拉着把手就等于拿着资源,针对把手操作就等于顺藤摸瓜操作了资源。例如:
// 建立资源
$ch = curl_init();
// 根据句柄操作资源
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE); // remove body
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
// 根据句柄执行这个资源
$head = curl_exec($ch);
登录后复制
英语里还有个词叫love handle
指得就是肚子周围的一圈可以捏来捏去的小赘肉,直译可以理解为“爱的把手”
类似就是一个通道,一个保持着某种状态的对象。
一些资源因为性质的原因无法被直接操作, 就需要通过句柄去操作。
比如:
-
操作数据库需要身份,所以登录数据库以后的句柄带着身份信息去操作数据库
-
文件的读写有文件指针位置,读写需要控制指针位置, 句柄提供了一个带状态的通道。
-
定时器是一种状态,把定时状态赋值给句柄, 当触发了一些事情以后可以去对句柄做处理(取消定时,提前触发)等。
你的应用程序往往要对对象(数据文件, 自定义的数据结构等)做一些操作, 而句柄可以简单地理解为是指向这些对象的一个指针. 在你的程序启动之后, 这些对象在内存中并非是一成不变的, 一方面由于处理器调度等原因, 另一方面现在的操作系统大多基于虚拟内存空间, 在这种情况下, 内存管理器会经常来回移动对象, 以此来满足当前运行的需要, 那如果说我们寻找对象的方式仅仅是依靠一个指针 —- 指向了一个固定的内存地址, 那么显然是没办法应对不断变化的实际内存, 所以, 句柄可以说是一个指向指针的指针, 它本身虽然没有直接指向对象, 但是可以通过它来获知对象在内存上的变动情况, 然后间接地获取对象
也就是说, 实际对象在内存里的地址通常是不固定的, 而固定的句柄则描述了相应对象在内存里的位置
在C语言里有的是指向结构体的指针