使用 Xcode 工具(Network Link Conditioner)模拟网络状态
当在和服务器进行接口调试时,有的时候网络不好,接口返回慢,这个不好调试,但是 Apple 为我们提供了一款工具,让我们可以很方便的进行挖网络状态的模拟. 安装 Additional Tools 下载 我们使用 Additional Tools for Xcode 工具来进行网络状态的模拟测试. 下载完毕 打开 DMG -> Hardware -> 双击 Network Lin...
当在和服务器进行接口调试时,有的时候网络不好,接口返回慢,这个不好调试,但是 Apple 为我们提供了一款工具,让我们可以很方便的进行挖网络状态的模拟. 安装 Additional Tools 下载 我们使用 Additional Tools for Xcode 工具来进行网络状态的模拟测试. 下载完毕 打开 DMG -> Hardware -> 双击 Network Lin...
class_rw_t里面的methods、properties、protocols是二维数组,是可读可写的,包含了类的初始内容、分类的内容 class_ro_t里面的baseMethodList、baseProtocols、ivars、baseProperties是一维数组,是只读的,包含了类的初始内容 然后看下方法的结构 struct method_t{ SEL ...
NSObject底层 看下NSObject中的定义: @interface NSObject <NSObject> Class isa; @end 其实NSObject就是一个Class对象,不过是对变量isa封装了一系列的操作而已,那么Class又是什么类型呢?在objc-runtime-new.h可以找到其定义,是指向结构体objc_class的指针,如下: ...
来看一张经典的描述 isa 和 superclass 指向的图。 从这我们可以看到: isa instance的isa指向class class的isa指向meta-class meta-class的isa指向基类的meta-class superclass class的superclass指向父类的class 如果没有父类,superclass指针为ni...
Runtime 是什么? Runtime 又叫运行时,是一套由 C、C++ 会和编写的一套 API,为OC加入了面向对象与运行时机制。 Objective-C 是一门动态语言,它会将一些工作放在代码运行时才处理而并非编译时。也就是说,有很多类和成员变量在我们编译的时是不知道的,而在运行时,我们所编写的代码会转换成完整的确定的代码运行。 KVO 实现原理 简单理解 KVO是基于r...
nonatomic 与 atomic nonatomic: 不会对生成的 getter、setter 方法加同步锁(非原子性) atomic: 会对生成的 getter、setter 加同步锁(原子性) setter / getter 被 atomic 修饰的属性时,该属性是读写安全的。然而读写安全并不代表线程安全。 线程安全概念(thread safety) 线程安...
为了统计用户信息、下发广告,服务器端往往需要手机用户设备及app的各种信息,整理一下各种信息的获取方式: 设备型号 // 获取设备型号然后手动转化为对应名称 - (NSString *)getDeviceName { // 需要#import "sys/utsname.h" #warning 题主呕心沥血总结!!最全面!亲测!全网独此一份!! struct ut...
Sources 目录 通常情况下,我们直接在 Playground 上面写代码,然后编译器会实时编译我们代码,并将结果显示出来。这很好,我们可以实时得到代码的反馈。 但是这也会产生一个问题,如果我们写了一个函数,或者自定义了一个 view,这部分代码一般情况下是不会变的,而编译器却会一次又一次地去编译这些代码,最终的结果就是导致效率的低下。 这时,Sources 目录就派上用场了,使用 ...
LLDB是XCode内置的为我们开发者提供的调试工具,它与LLVM编译器一起,存在于主窗口底部的控制台中,能够带给我们更丰富的流程控制和数据检测的调试功能。在调试过程中熟练使用LLDB,可以让你debug事半功倍。 LLDB可以带来以下体验: 允许你在程序运行的特定时暂停它 查看变量的值 执行自定的指令 按照你所认为合适的步骤来操作程序的进展 More 常用基...
简单的 Model 与 JSON 相互转换 // JSON: { "uid":123456, "name":"Harry", "created":"1965-07-31T00:00:00+0000" } // Model: @interface User : NSObject @property UInt64 uid; @property NSString *nam...