摘要:
静态库和动态库的区别 1、 形式上 静态库是.a 和 .framework。 动态库是.dylib和 .framework ,xcode8 为.tbd ,本质是.dylib 2、使用上: 静态库,链接时,会被完整的复制到可执行文件中,如果多个APP 使用了同一个静态库,就会有多次拷贝,会占用更多的内 阅读全文
摘要:
weak指针的实现原理 也就是,weak指针指向对象销毁的时候,weak指针怎么做到变为nil的。 Runtime维护了一个weak表,用于存储指向某个对象的所有weak指针。weak表其实是一个Hash(哈希)表, Key是所指对象的地址,Value是weak指针的地址(这个地址的值是所指对象的地 阅读全文
摘要:
在64位中,引用计数可以直接存储在优化过的isa指针中,也可能存储在SideTable类中。 在isa里面,有一个extra_rc参数 其中:rc就是retainCount引用计数的意思。 则has_sidetable_rc=1,引用计数器会存储在一个名为SideTable的类的属性中。 struc 阅读全文
摘要:
前言: Automatic Reference Counting,自动引用计数,即 ARC,WWDC 2011 和 iOS 5 所引入的最大的变革和最激动人心的变化。ARC 是新的 LLVM 3.0 编译器的一项特性,使用 ARC,可以说一 举解决了广大 iOS 开发者所憎恨的手动内存管理的麻烦 阅读全文
摘要:
前言: 在iOS中,使用引用计数来管理OC对象内存 一个新创建的OC对象引用计数默认是1,当引用计数减为0,OC对象就会销毁,释放其占用的内存空间。 调用retain会让OC对象的引用计数+1,调用release会让OC对象的引用计数-1。 内存管理的经验总结 当调用alloc、new、copy、m 阅读全文
摘要:
前言: 从64位开始,iOS引入了Tagged Pointer技术,用于优化NSNumber、NSDate、NSString等小对象的存储。 Tagged Pointer主要为了解决两个问题: 内存资源浪费,堆区需要额外的开辟空间 访问效率,每次set/get都需要访问堆区,浪费时间, 而且需要 阅读全文
摘要:
数据存储策略 在 iOS 应用程序中,从 “数据缓冲在哪里” 这个纬度看,缓冲一般分两种类型。 内存缓冲 磁盘缓冲 内存缓冲是将数据缓冲在内存中,供应用程序直接读取和使用。优点是读取速度快。缺点是由于内存资源有限,应用程序在系统中申请的内存,会随着应用生命周期结束而被释放,会导致内存中的数据 阅读全文
摘要:
前言:CADisplayLink、NSTimer 不准时 CADisplayLink、NSTimer是基于RunLoop机制的,如果RunLoop的任务过于繁重,有可能会导致前两个定时器不准时。 举个例子: 加入我们创建了一个NSTimer定时器,每1秒钟做任务。那么,什么时候执行NSTim 阅读全文
摘要:
前言:CADisplayLink、NSTimer 循环引用问题 CADisplayLink、NSTimer会对Target产生强引用,如果target又对他们产生强引用,那么就会引发循环引用。 @interface ViewController () @property (nonatomic, 阅读全文
摘要:
一、简介 在 iOS 应用开发中,自定义一个类一般需要继承自 NSObject 类或者 NSObject 子类,但是,NSProxy 类不是继承自 NSObject 类或者 NSObject 子类,而是一个实现了 NSObject 协议的抽象基类。 /* NSProxy.h Copyright 阅读全文