簡介
好久不上簡書了,但是一直關(guān)注簡書呢,微博上有很多大神在分享iOS的學(xué)習(xí)知識,真是對他們很佩服,在春節(jié)期間,他們都在孜孜不倦的學(xué)習(xí)和總結(jié),這也對我有很大的鼓勵。最近swift看得少了,想先把objective-c看著,抽空看看swift。
業(yè)界動態(tài)
自己身在井底,但是互聯(lián)網(wǎng)使我們能共享一些信息,一月份的時候找工作,很多工作了兩年多,三年多的人開始出來找工作了,我才剛畢業(yè),跟他們交流的時候,沒想到他們也有很多找工作的煩惱,比如說,給不到想要的薪資,iOS工作機(jī)會少了,大家開始用swift了。前面的都好理解,因為iOS的工作機(jī)會從狂熱趨于平穩(wěn)了。后者想必大家也感覺到了,就是swift已經(jīng)成為iOS開發(fā)者找工作的必要技能了,我有幸學(xué)習(xí)了一段時間,看了幾本書,看了點網(wǎng)上的swift面試題,還能過關(guān),但是我知道我的swift還有很長的路要走。所以即使你的公司現(xiàn)在不用swift,你也要學(xué)swift,聽說swift在國外已經(jīng)大部分在用了。
工作/項目
找工作其實我有一大堆要說的,但是對于我這種剛畢業(yè)的可以參考沒有故事的卓同學(xué)寫的一篇文章http://www.itdecent.cn/p/6b45c4fd7b47 ,里面說到,簡歷上要寫幾個項目,這一點我也深表認(rèn)同,看《程序員面試寶典也提到》最重要的不是說你有幾個項目,而是你解決了什么問題,獲得了什么。一個好項目能讓你成長的不止一點。最近在做支付類的項目,iOS客戶端做的是請求API,展示數(shù)據(jù),設(shè)計類的調(diào)用,不過可惜的是沒怎么使用緩存,之前有看過一篇文章說支付寶使用了預(yù)緩存和CDN分發(fā)技術(shù),預(yù)緩存在之前的項目里有做過,是APP一有WiFi就向服務(wù)器請求很多數(shù)據(jù),這樣在用戶真正使用的時候就很快了。當(dāng)然后端服務(wù)器的做得好也很重要,前端我們在請求的時候有些時候盡量使用多并發(fā),節(jié)省請求的時間,讓兩個請求同時進(jìn)行,都執(zhí)行完了,再走下一步。
學(xué)習(xí)到的零碎知識點
最近在看一本書叫《Effective Objective2.0 》帶一把小提琴的那本書,上面有很多找工作時會問你的面試題,比如深拷貝和淺拷貝的用法,objective-c很有意思的定義了一些copy結(jié)果,比如不可變對象copy的是指針拷貝,淺拷貝,可變對象拷貝的是深拷貝,內(nèi)容拷貝,比如NSString copy后只是copy了指針,NSSMutableString copy后是一個新的對象。以及循環(huán)引用問題,ARC的內(nèi)存管理機(jī)制是指一個對象只要被引用就不能被釋放,屬性是封裝的實例變量,是Objective-C的語法糖,為開發(fā)人員自動建立getter和setter方法,并指明該實例變量和對象的關(guān)系,如果是strong、retain、copy,就是強(qiáng)引用,意思是,該屬性不釋放,該對象就不釋放,如果是assign,weak,就是弱引用,對象不用管屬性釋放不釋放。如果一個對象的屬性是強(qiáng)引用,該屬性是個對象,它的屬性里也有這個對象,也是強(qiáng)引用,這就是你先釋放,你不放我就不放的矛盾了,如果這樣的話,應(yīng)該定義某個屬性和對象的關(guān)系為弱引用,這樣某一方不在意你釋放不釋放先把你給釋放了,他釋放了你也就釋放了,循環(huán)就打破了。這本書可以說主要講了內(nèi)存管理,iOS的內(nèi)存分配機(jī)制是棧區(qū),堆區(qū),全局區(qū),文字常量區(qū)和代碼區(qū),其中棧區(qū)是存放,函數(shù)參數(shù)和局部變量,比如你生成的某個block,NSString等等,堆區(qū)存放對象,比如ViewController,你寫的控件等等,全局區(qū)存放,全局變量,靜態(tài)變量,當(dāng)你在棧上使用copy的時候是復(fù)制到堆上,在全局區(qū)copy的時候什么都沒發(fā)生,在堆上copy的時候是增加引用。
理解的一些概念
為什么block做屬性使用copy
答:因為block分配在三種地方棧,堆,全局,沒有引用外部變量的block是全局,有引用的是棧,在ARC情況下,如果block在棧,系統(tǒng)自動為我們加好了copy分配到堆中,從棧中copy是復(fù)制到了堆中,從全局copy什么也沒發(fā)生,從堆中copy是增加了引用計數(shù),所以block使用copy是最保險的做法。為什么 NSMuatbleArray copy后 修改后會發(fā)生什么?
答:會崩潰,因為NSMuatbleArray copy后會返回NSArray,有意思的是NSArray mutableCopy后會返回NSMutableArray,這是Objective-C為了方便轉(zhuǎn)化兩種類型提供的方法。另外NSMutableArray 的copy是創(chuàng)建了一個新的Array對象,但是子項還是原來的子項。重寫一個類用繼承好還是分類好?
答:網(wǎng)上給的答案一般都是分類,可是分類會造成一旦修改原類的方法,不管你引用不引用這個分類,其他地方調(diào)用這個方法也會被覆蓋掉。繼承不會在沒有引用子類的情況下,就把父類的方法重寫掉,保護(hù)了其他不希望被影響的地方。這兩個方法根據(jù)情況來決定,如果想要全部都重寫就使用分類,如果想部分重寫就使用繼承。