乐于分享
好东西不私藏

iOS--Block本质

iOS--Block本质
闲杂:
之前用过一些平台写过blog不是因为网站被关就是自己搭建github.io图片存储容量受限等原因, 后续也就没再更新过任何信息, 平时收藏在印象笔记中的信息,也因为code style问题, 也不愿意再用它了。
在翻看自己之前收藏的一些资料时,发现有很多文章不同的出处之间, 还是会有一些互相矛盾的小细节, 这里还是想通过自己仔细分析验证的后信息,记录下来,方便大家参考。
一. Block的本质

block本质上实际是一个OC对象,由于它的内部isa指针,这个与NSObject的内部一样都有一个isa指针, block这个对象封装了函数调用的地址及函数调用的参数,返回值以及可自动捕获外部变量。
比如我们定义一个block,例如:
voidtestBlock(){    int a = 1;    void (^block)(void) = ^{        // NSLog(@"Hello:: %ld", a);    };    block();}intmain(int argc, char * argv[]) {    @autoreleasepool {        testBlock();    }}

为了研究它的内部结构,可以将此代码保存为一个.c文件,例如test.c,通过运行clang -rewrite-objc test.c命令, 可以在同目录下生成一个test.cpp文件。 (在ios项目中的main.m文件,可以通过命令行 xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m编译为一个c++文件,不过这个文件会更大一些,可以滚动到文件的最下方找到main方法之前的那些代码即可。

生成的代码如下:

重点关注main函数上边的定义,从上面110行,可以了解到block中编译后会的结构体中可以看到:

__testBlock_block_impl_0(void *fp, struct __testBlock_block_desc_0 *desc, int flags=0) {    impl.isa = &_NSConcreteStackBlock;    impl.Flags = flags;    impl.FuncPtr = fp;    Desc = desc;}
  • impl.isa: 它的内部实际有一个isa指针, 并且是一个stackBlock(栈类型的block),后面会介绍到block的各个类型

  • impl.FuncPtr: 它是一个函数指针,指向的是block要执行的代码封装成了一个函数,然后用这个指针指向这个函数。一句话理解: FuncPtr指向的就是block体中的内容;

  • impl.Desc: 是block占用的内存大小;

  • impl.Flags: block的负载信息(引用计数,以及类型信息);

 这个结构体中,包含2个成员变量:

  • reserved: 这里是0,它表示Block版本升级所需的预留空间;

  • Block_size: Block的大小,也就是图中的(sizeof(struct __blockTest_block_impl_0))

当block中有定义使用外部变量时,也会在block体新增一个同名的变量,

例如block体中有使用外部的a, 那么block的struct结构中也会多一个a的变量;这个是block自动捕获的。

  • 全局block __NSGlobalBlock__

    如果block中没有访问普通局部变量,那么这个block就是__NSGlobalBlock__全局block类型的内存存储在数据区的全局静态区(在上节内存分布中已经介绍过各个区的类型,可自行查看)。

    注意: 全局变量和全局静态变量,在任何地方都可以被访问,因此几遍在block中有调用到该类型的变量,那么也不会被捕获, 因为该变量可以直接被访问。

  • 栈block __NSStackBlock__

    如果block中访问了普通的局部变量,那它就是一个__NSStackBlock__,它在内存中存储在栈区, 栈区的block是由系统管理释放的,所以在调用栈block时要注意,要确保它没有被释放。

    对栈block进行copy操作,会从这个block从栈copy到堆上。

    在MRC下,默认创建的block是栈block,而ARC下默认创建的block是堆block,它会帮我们自动从栈block copy到堆block, 如果想在ARC下创建栈block,可以在block的定义上增加一个__weak的修饰符即可。

   __NSStackBlock__继承链:__NSStackBlock__ : __NSStackBlock : NSBlock : NSObject

  • 堆block  __NSMallocBlock__

    当block发生了copy动作,也就是从栈copy到了堆, 那么这个block就是__NSMallocBlock__类型, 它存储在堆区。

__NSMallocBlock__继承链:__NSMallocBlock__ : __NSMallocBlock 

: NSBlock : NSObject

在ARC环境下, 编译器会根据情况,自动将栈上的block复制到堆上, 常见有4种情况:

  • block作为方法的返回值时

    typedef void (^TestBlock)(void);- (TestBlock)createTestBlock{    NSInteger a = 1;    return ^{        NSLog(@"******%ld",a);    };}
  •  block常见的情况(默认会赋值给强指针):

    - (void)testBlock{NSInteger a = 1;void (^testMyBlock)(void)=^{NSLog(@"******%ld",a);	};	testMyBlock();}
  •  当block作为参数传递给coacoaAPI时

    [UIView animateWithDuration:1.0f animations:^{}];
  • 当block作为GCD的api的参数时

    dispatch_async(dispatch_get_main_queue(), ^{});

在ARC下我们通常在声明一个block的属性时, 建议使用copy关键字,这里如果使用copy或者strong关键字,其实都会将栈区block复制到堆上,但是MRC下,需要写出copy关键字。

@property (nonatomicstrongvoid (^testBlock)(void); @property (nonatomiccopyvoid (^testBlock)(void);
各个变量的传递方式对比
变量类型
是否需要捕获到block中
访问的方式
局部变量
值传递
局部static变量
引用传递
全局变量
否(不需要捕获,直接可访问)
直接访问
二. Block的内存管理

上面已经提到了3种类型的block的存储区间,我们知道block变量默认值copy, 一旦被block捕获后,外部变量修改值,不会对block内部变量造成任何影响, 如果想要block外部和内部同时都可以修改时,需要__block变量来实现。

例如: 下面这段代码,我们知道block中是不可以直接对a进行修改的,

- (void)test{    int a = 1;    void (^testblock)(void) = ^{        a = 2;    };}

因为a是局部变量,它的作用域和生命周期仅仅在test方法里边, 而Block题中会捕获这个变量a,在testblock中会声明一个同名的a变量,且值=1,我们知道Block会将大括号的代码封装为一个函数并由impl.FuncPtr指向,如果在Block中访问变量a就相当于是,第二个函数访问test函数中的局部变量,这种操作肯定是不允许的,所以程序就会报错。

那么如果想在内部修改a变量的值, 上面也提到了比如将a定义为

static int a = 1

这种局部变量虽然在test方法里面, 在Block中实际是一次引用传递,所以Block中就可以捕获a的地址,并且修改。 但是这种方式并不被推荐, 由于静态局部变量在程序运行中是不会被释放的, 所以还是应该要尽可能的少用, 第二种方式就是通过__block的方式。

- (void)test1{    __block int a = 1;    void (^testblock)(void) = ^{        age = 2;    };    testblock();    NSLog(@"%d",a);}

上面已经介绍过,它通过clang可以查看到它真正编译后的结构体是:

struct __main_testblock_impl_0 {  struct __block_impl impl;  struct __main_testblock_desc_0* Desc;  __Block_byref_a_0 *a; };struct __Block_byref_a_0 {  void *__isa; // isa指针  __Block_byref_a_0 *__forwarding; // 如果这block是在堆上那么这个指针就是指向它自己,如果这个block是在栈上,那这个指针是指向它拷贝到堆上后的那个block int __flags; int __size; // 结构体大小 int a; // 真正捕获到的a};

可以知道a用__block修饰后, 在Block结构体中会变成__Block_byref_a_0 *a结构体;这个结构体中有一个成员变量a, 这个才是真正捕获到的外部变量a, 实际外部变量的a的地址指向的也是这里的地址,所以不管是外部还是block里边修改a,他们都是通过同一个地址进行的修改,

当变量a被__block修饰后,它就不再是test方法内部的局部变量了,而是被包装为了一个对象(这里描述的对象:__Block_byref_a_0 *a结构体,因为它内部有一个成员变量isa指针), a就存储在这个之中。

在内部实现的核心上, 究竟是如何实现的变量可以同时被访问呢?

那么在内存方面当Block从栈复制到堆,__block的也会跟随变化:

  1. 在栈Block时,__block的存储也在栈上,__block变量被栈上的Block持有。

  2. 在堆Block时(copy动作),这时会调用Block内部的copy函数,copy函数内部就会调用底层的_Block_object_assign函数, 此时__block变量也会copy到堆上,同样,新的堆区__block变量也会被堆区Block所持有。

  3. 当堆区的Block被释放时, 会调用Block内部的dispose,它内部会调用_Block_object_dispose函数,堆上的__block变量被释放。

  1. 栈区上比如有多个block同时放问__block变量时, 这个__block变量是被多个Block所持有的。

  2. 例如图上的Block1在copy到堆区时,__block变量也会被复制到堆区,并被堆区的Block1所持有, 栈区的Block2仍然持有栈区的__block变量。原栈上的__block变量里的__forwarding变量指向copy到堆上的__block变量。

  3. 如果Block2从栈区copy到堆区, 同样堆上的__block变量也会堆区Block1和Block2所同时持有,__block变量的引用计数会+1。

  4. 当堆区Block都释放后, __block变量的引用计数=0,这时通过调用

    _Block_object_dispose函数,堆上的__block变量被释放。

上面介绍有一个很关键的点,就是__forwarding的变化, 这个是技术上实现堆区,栈区都能共同访问同一个变量的关键,流程图如下:

结论: __forwarding设计的目的就是保证在栈上和在堆上都能正确的访问到变量。

整理一下知识点:

__block不管是修饰基本数据类型还是修饰引用对象数据类型,底层都是将它包装成了一个对象(__Block_byref_a_0 *a结构体的对象), 我们比如叫这个对象起名为__blockObjc, 在Block结构体中有这个对象__blockObjc ,在block内部的内存管理上:

  • 栈Block, block内部并不会对__blockObjc产生强引用。

  • 堆Block, block内部会对__blockObjc产生强引用,并且在堆block释放时,通过内部的dispose函数,dispose函数内部又会调用_Block_object_dispose函数来释放__blockObjc

后续

本篇重点介绍了Block的本质,包括对block的结构体的拆解还有内存管理都有了详细说明, 所以我们就知道了,为什么在一个类中定义的Block,如果是copy关键字修饰, 那么self会强持有这个Block。而如果Block中一旦有使用self或self的成员变量, 那么self也就会被Block所捕获, 并生成内部的一个强引用的self的变量, 我们知道Block本质上还是oc对象,这样也就形成了对象与对象之间强持有的关系。 所以这也就为什么一定要在block之前先进行__weak关键字修饰的根本原因。

好了,今天就先介绍这么多, 后续再结合GCD的方式,对block易出错的点进行一下介绍。

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-23 09:59:50 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/481711.html
  2. 运行时间 : 0.088519s [ 吞吐率:11.30req/s ] 内存消耗:4,839.92kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=96aeeeae59a8745173b2103a8bd49f10
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.68 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.80 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000558s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000832s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000347s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000334s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000516s ]
  6. SELECT * FROM `set` [ RunTime:0.000195s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000558s ]
  8. SELECT * FROM `article` WHERE `id` = 481711 LIMIT 1 [ RunTime:0.000537s ]
  9. UPDATE `article` SET `lasttime` = 1774231190 WHERE `id` = 481711 [ RunTime:0.004607s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000234s ]
  11. SELECT * FROM `article` WHERE `id` < 481711 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000513s ]
  12. SELECT * FROM `article` WHERE `id` > 481711 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.004983s ]
  13. SELECT * FROM `article` WHERE `id` < 481711 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001206s ]
  14. SELECT * FROM `article` WHERE `id` < 481711 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000953s ]
  15. SELECT * FROM `article` WHERE `id` < 481711 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000666s ]
0.090188s