1、理解内存管理
引用计数:
- 是一个简单而有效的管理对象生命周期的方式;
- 当对象的引用计数变为0时,说明这个对象不再被任何指针指向了,这个时候我们就可以将对象销毁,回收内存。
由于引用计数简单有效OC 、Swift
、微软的COM(component Object Model)
、C++11
等引用计数的内存管理方式。
ARC(Automatic Reference Count)
自动引用计数
循环引用(reference cycles)问题
Core Foundation 对象的内存管理
__bridge:
只做类型转换,不修改相关对象的引用计数
__bridge_retained:
类型转换后,将相关对象的引用计数加1
__bridge_transfer:
类型转换后,将该对象的引用计数交给ARC管理。
2、GCD(Grand Central Dispatch)
其他多线程方案,如NSThred、NSOperationQueue、NSInvocationOperation
3、UIWindow
- UIWindow 继承自UIView,
- WindowLevel
UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal; 0
UIKIT_EXTERN const UIWindowLevel UIWindowLevelAlert; 2000
UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar 1000
- 不要滥用UIWindow :常见滥用方式是把需要弹出的界面都设置成单列,需要时调用显示。这种做法会使得新创建的UIWindow一直得不到释放。并且当出现多个UIWindow需要相互有层级覆盖关系时,实现起来比较复杂。
CoreText
CoreText是用于处理文字和字体的底层技术
Quartz是一个2D图形渲染引擎,能够处理iOS和OSX中的图形显示问题。
isa指针
- Objective-C语言内部,每个对象都有一个isa指针,指向该对象的类。
- 每一个类描述 了一些列它的实例特点,包括成员变量的列表、成员函数的列表等。
-
每一个对象都可以接收消息,而对象能够接收的消息列表保存在它所对应的类中
类的成员变量
下图,通过修改该指针指向的指针的值
,就可以动态的为某一个类增加成员方法。这也是Category实现的原理
通过objc_setAssociatedObject 和objc_getAssociatedObject 方法可以变相的给对象增加成员变量,但由于实现机制不一样,所以并不是真正改变对象的内存结构。
因为isa本身也只是一个指针,所以除了对象的方法可以动态修改外,也可以在运行时动态的修改isa指针的值,达到替换对象整个行为的目的。
对象模型的应用
动态创建对象 :我们可以使用Objective-C语言提供的与runtime相关的函数,动态的创建一个新的类,并且通过相关的方法来获取isa指针的值,从而了解对象的内部结构
系统相关API及应用
isa swizzling 的应用
网友评论