Runtime之MetaClass
对于iOS开发者来说,元类
一直是一个在面试时被重点考察的点,为什么在语言设计时要增加元类
这个概念?他的优点是什么?他到底有什么作用呢?这篇文章我们从Runtime
源码的角度和语言设计的角度来探讨MetaClass
存在的原因以及他的存在解决了哪些问题。
What is Life But One Chanllege After Another
对于iOS开发者来说,元类
一直是一个在面试时被重点考察的点,为什么在语言设计时要增加元类
这个概念?他的优点是什么?他到底有什么作用呢?这篇文章我们从Runtime
源码的角度和语言设计的角度来探讨MetaClass
存在的原因以及他的存在解决了哪些问题。
自从到现在的公司半年一来,业务上一直在不停的迭代。为了维持版本的迭代速度,代码review变得不再像之前那么严苛。导致近期出现了几个比较严重的问题,趁着周末的时间,使用Time Profiler好好的检测一下应用及时发现问题,解决问题。
最近去外面面试了一次,有一个问题觉得很有意思:OC中为什么要存在metaClass,在类的结构上这么设计的原因是什么?metaClass中都有什么?有什么优点?
这篇文章我们就来讨论一下上面的这几个问题!
Block默认不允许修改外部变量的值,我们可以通过对要修改的变量添加__block修饰,来达到可以在block内部修改外部变量的目的。那么__block到底都做了什么呢?为什么添加了__block就可以在block内部修改外部变量了呢!
OC中的异常一般是通过传递一个NSError的对象到方法中,如果方法执行错误会直接返回。并没有像JAVA一样大量使用Try catch进行异常的捕获。这是因为try catch无法捕获UncaughtException,而oc中大部分crash如:内存溢出、野指针等都是无法捕获的,而能捕获的只是像数组越界之类。所以try catch对于oc来说,比较鸡肋。虽说是鸡肋 但是我们在某些情况下还是有用的 这里简单介绍一下。
每个线程(包括主线程),都维护了一个管理 NSAutoreleasePool 的栈。当创先新的 Pool 时,他们会被添加到栈顶。当 Pool 被销毁时,他们会被从栈中移除。
autorelease 的对象会被添加到当前线程的栈顶的 Pool 中。当 Pool 被销毁,其中的对象也会被释放。当线程结束时,所有的 Pool 被销毁释放。