240 发简信
IP属地:山西
  • iOS Block

    Block的分类 Block有三种类型:全局Block,堆区Block,栈区Block 全局Block 当Block没有引用到局部变量时或者Block里面使用的是全局变量,静...

  • 120
    iOS锁下

    上篇文章介绍synchronized锁,今天介绍的是其他常用锁:NSLock,NSRecursiveLock ,NSCondition,NSConditionLock 锁的概...

  • 120
    iOS 锁上 synchronized

    iOS中有哪些锁呢? OSSpinLock,dispatch_semaphore_t,os_unfair_lock,pthread_mutex_t,NSLock,NSCond...

  • 120
    iOS线程与GCD

    线程和进程的区别 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程。(进程是资源分配的最小单位) 线程:同一类线程...

  • 120
    面试题分析

    load和initialize方法的调用原则和调用顺序? load方法的调用时在dyld加载程序的时候调用,在main函数之前,调用顺序:父类,子类,分类,如果有多个分类,看...

  • 120
    类的加载原理下

    上篇文章讲了类是如何加载的,但是我们只看到了类里面的方法,属性和协议的加载,并没有看到分类加载,这篇文章介绍分类的加载。 分类加载 1. 分类的本质 首先我们通过一个简单代码...

  • 120
    类的加载原理上

    上篇文章我们已经了解到objc_init调用_dyld_objc_notify_register注册了load_image,load_image就是调用所有类里的load方法...

  • 120
    iOS程序加载流程—dyld流程

    本篇文章主要是探索程序启动流程。 load方法断点 首先我们来个简单程序 通过打印我们知道+load > c++构造函数 > main接下来我们看看+load方法的函数调用堆...

  • objc_class 中的cache

    cache的获取 通过名字我们猜测cache应该是缓存,但是到底是缓存了什么呢?这个就需要探索了首先获取cache,通过之前的篇章我们知道,要获取cache,需要通过首地址编...

  • 120
    类的方法属性探究下

    类的属性 从上面我们可以看到类定义在底层会被编译成结构体,而定义的属性会被定义成成员变量,我们在开发的时候,属性会自动生成get和set方法,而这边我看到底层的方法如下 我们...

  • isKindOfClass和isMemberOfClass的区别

    判断对象类型 -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 -(BOOL) isMemberOfClass: clas...

  • 类的方法属性探究上

    今天来探索一下类的成员方法和成员属性以及类方法都存放在哪里 Class的本质 首先先来补充一下类的本质Class,通过源码知道 Bits的获取 为什么要研究这个bits呢?还...

  • 120
    对象,类,元类之间的关系

    在之前的文章对象内存探索中,我们已经知道对象默认都有一个isa指针,这个指针指向的正式对象的类,而在oc中一切皆为对象,那类是否也有isa指针,他的指针指向的是谁呢?带着这个...

  • ISA指针探索

    1.什么是isa指针呢? 众所众知的每个对象里面都有一个isa指针,而这个isa指针指向哪里呢?首先我们先来看一段代码 我们知道对象的首地址指向的就是isa指针即0x0000...

  • oc对象内存

    1 影响对象大小的是什么? 属性,方法,成员变量? 当我们添加两个成员方法 有上面的示例可以总结出,对象的大小由成员变量和属性决定 2 探究类的本质 通过clang编译成cp...

  • 120
    alloc 流程

    alloc 创建对象 输出结果 从结果中可以看出p 和 p1 p2 都指向同一内存地址,可以得出一个结论就是alloc开辟了内存空间,init并没有。注意 这边的&p,&p1...

  • 逆向上的一些命令

    1. ldid -e xxxx 查看可执行文件或者动态库的签名信息 2.otool 2.1 otool -l WeChat 2.2 查看某个应用所用到的一些系统库、支持的架构...