写在前面
今年暑假,自己独立完成了一个简单的iOS的APP,是一个bbs的客户端,叫做喻信星空。现在正在测试,准备将其上架app store。但是光做项目不做总结肯定不行,所以这里写篇博客,把项目里遇到的坑都记录下来,不过这篇博客里肯定是有干货的,所以如果你看到了这里,希望你能把它看完,并顶我一下(^-^)
这是一系列博客,此系列共两篇文章,此篇博客是该系列博客的第一篇:网络接口的封装。
今年暑假,自己独立完成了一个简单的iOS的APP,是一个bbs的客户端,叫做喻信星空。现在正在测试,准备将其上架app store。但是光做项目不做总结肯定不行,所以这里写篇博客,把项目里遇到的坑都记录下来,不过这篇博客里肯定是有干货的,所以如果你看到了这里,希望你能把它看完,并顶我一下(^-^)
这是一系列博客,此系列共两篇文章,此篇博客是该系列博客的第一篇:网络接口的封装。
这篇博客本来是回答《招聘一个靠谱的iOS》中在有了自动合成属性实例变量之后,@synthesize还有哪些使用场景? 的这一问题,但是写着写着在了解了property的相关内容后,突然冒出了许多对@synthesize使用方法的理解,并且记录了下来,希望分享给大家,与大家一同进步,如果理解的不正确,欢迎在评论区指正,有评论必回!
前段时间写了一篇博客runtime如何通过selector找到对应的IMP地址?(分别考虑类方法和实例方法),这是在看《招聘一个靠谱的iOS》时回答第22题时总结的一篇博客,不过这篇博客中并没有牵涉到底层的代码,而且也留下了几个没有解决的问题,这篇博客将深入runtime源码继续探索这个问题,并尝试解决上篇博客中未解决的问题,本人第一次阅读源码,如果有分析错误的地方,欢迎大家纠正。
最近在看《招聘一个靠谱的iOS》,这是其中的一个题目,看着别人的解答不是很详细,于是就想弄清楚一些,通过查找了一些资料并且自己写了一些测试的代码,在这里做个总结!
在iOS中最标准的初始化方法是alloc+init,而此外也可以使用new来初始化,当然这些初始化方法都是我们用来创建一个实例时使用的,你可能不知道当类在初始化时所使用的load和initialize方法。
大家都知道alloc是分配内存,但其实alloc函数并不是仅仅做了分配内存的工作,总共做了一下三件事情
将所有的实例变量的内存设为0
官方建议,不要重写alloc方法使其进行一些初始化操作,应该将其放在init方法中。
由于历史原因,alloc调用allocWithZone:方法,所以我看有的地方说用alloc和init的方法实例化要好于用new方法,因为alloc使用了zone在分配内存时会选用相邻的内存,减少调用时的消耗,提升程序的速度,后来在OC高级编程这本书中看到,NSZone是为了防止内存碎片化而引入的结构,而现在的运行时系统简单的忽略了区域的概念,因为运行时系统中的内存管理本身已极具效率了,使用区域管理内存反而会引起内存使用效率低下以及源代码复杂化等问题。