2月份工作随笔-iOS基础知识回顾

简介

好久不上简书了,但是一直关注简书呢,微博上有很多大神在分享iOS的学习知识,真是对他们很佩服,在春节期间,他们都在孜孜不倦的学习和总结,这也对我有很大的鼓励。最近swift看得少了,想先把objective-c看着,抽空看看swift。

业界动态

自己身在井底,但是互联网使我们能共享一些信息,一月份的时候找工作,很多工作了两年多,三年多的人开始出来找工作了,我才刚毕业,跟他们交流的时候,没想到他们也有很多找工作的烦恼,比如说,给不到想要的薪资,iOS工作机会少了,大家开始用swift了。前面的都好理解,因为iOS的工作机会从狂热趋于平稳了。后者想必大家也感觉到了,就是swift已经成为iOS开发者找工作的必要技能了,我有幸学习了一段时间,看了几本书,看了点网上的swift面试题,还能过关,但是我知道我的swift还有很长的路要走。所以即使你的公司现在不用swift,你也要学swift,听说swift在国外已经大部分在用了。

工作/项目

找工作其实我有一大堆要说的,但是对于我这种刚毕业的可以参考没有故事的卓同学写的一篇文章http://www.jianshu.com/p/6b45c4fd7b47 ,里面说到,简历上要写几个项目,这一点我也深表认同,看《程序员面试宝典也提到》最重要的不是说你有几个项目,而是你解决了什么问题,获得了什么。一个好项目能让你成长的不止一点。最近在做支付类的项目,iOS客户端做的是请求API,展示数据,设计类的调用,不过可惜的是没怎么使用缓存,之前有看过一篇文章说支付宝使用了预缓存和CDN分发技术,预缓存在之前的项目里有做过,是APP一有WiFi就向服务器请求很多数据,这样在用户真正使用的时候就很快了。当然后端服务器的做得好也很重要,前端我们在请求的时候有些时候尽量使用多并发,节省请求的时间,让两个请求同时进行,都执行完了,再走下一步。

学习到的零碎知识点

最近在看一本书叫《Effective Objective2.0 》带一把小提琴的那本书,上面有很多找工作时会问你的面试题,比如深拷贝和浅拷贝的用法,objective-c很有意思的定义了一些copy结果,比如不可变对象copy的是指针拷贝,浅拷贝,可变对象拷贝的是深拷贝,内容拷贝,比如NSString copy后只是copy了指针,NSSMutableString copy后是一个新的对象。以及循环引用问题,ARC的内存管理机制是指一个对象只要被引用就不能被释放,属性是封装的实例变量,是Objective-C的语法糖,为开发人员自动建立getter和setter方法,并指明该实例变量和对象的关系,如果是strong、retain、copy,就是强引用,意思是,该属性不释放,该对象就不释放,如果是assign,weak,就是弱引用,对象不用管属性释放不释放。如果一个对象的属性是强引用,该属性是个对象,它的属性里也有这个对象,也是强引用,这就是你先释放,你不放我就不放的矛盾了,如果这样的话,应该定义某个属性和对象的关系为弱引用,这样某一方不在意你释放不释放先把你给释放了,他释放了你也就释放了,循环就打破了。这本书可以说主要讲了内存管理,iOS的内存分配机制是栈区,堆区,全局区,文字常量区和代码区,其中栈区是存放,函数参数和局部变量,比如你生成的某个block,NSString等等,堆区存放对象,比如ViewController,你写的控件等等,全局区存放,全局变量,静态变量,当你在栈上使用copy的时候是复制到堆上,在全局区copy的时候什么都没发生,在堆上copy的时候是增加引用。

理解的一些概念

  1. 为什么block做属性使用copy
    答:因为block分配在三种地方栈,堆,全局,没有引用外部变量的block是全局,有引用的是栈,在ARC情况下,如果block在栈,系统自动为我们加好了copy分配到堆中,从栈中copy是复制到了堆中,从全局copy什么也没发生,从堆中copy是增加了引用计数,所以block使用copy是最保险的做法。

  2. 为什么 NSMuatbleArray copy后 修改后会发生什么?
    答:会崩溃,因为NSMuatbleArray copy后会返回NSArray,有意思的是NSArray mutableCopy后会返回NSMutableArray,这是Objective-C为了方便转化两种类型提供的方法。另外NSMutableArray 的copy是创建了一个新的Array对象,但是子项还是原来的子项。

  3. 重写一个类用继承好还是分类好?
    答:网上给的答案一般都是分类,可是分类会造成一旦修改原类的方法,不管你引用不引用这个分类,其他地方调用这个方法也会被覆盖掉。继承不会在没有引用子类的情况下,就把父类的方法重写掉,保护了其他不希望被影响的地方。这两个方法根据情况来决定,如果想要全部都重写就使用分类,如果想部分重写就使用继承。

推荐阅读更多精彩内容