二:無限輪播器的實現(xiàn)機理
http://www.bkjia.com/IOSjc/1020086.html
八:使用地圖的時候,經(jīng)常使用其什么功能,需要注意些什么?
(1)使用地圖定位的時候需要注意的問題
注意點:使用corelocation框架; 1.plist文件中添加字段(檢索)和代碼授權(quán),保護用戶隱私2.聯(lián)網(wǎng)3.模擬器沒有位置需要自己添加4.切換模擬器才ok
(2)地理與反地理編碼
注意點:使用corelocation框架,地理編碼指地理名轉(zhuǎn)換為經(jīng)緯度,使用geocodeAddressString方法;反地理編碼指經(jīng)緯度轉(zhuǎn)換為地理名,使用reverseGeocodeLocation方法
(3)地圖展示
注意點:使用corelocation,
MapKit框架;注意在info.plist文件中添加兩個字段,既一直允許定位和當使用時添加定位
(4)定位追蹤
注意點:就是一個屬性
(5)自定義大圖針的詳情視圖
注意點:核心思路:創(chuàng)建一個新的大頭針視圖展示在點擊的相同的位置,并且添加這個大頭針視圖到地圖上
(6)劃線功能
注意點:1:在請求對象中封裝起點和終點2:通過代理返回一個”折線渲染器”來決定線的寬度和顏色等信息
九:面向?qū)ο蟮牡娜筇匦?OC的三大特性)
面向?qū)ο蟮娜筇匦?封裝,繼承履恩,多態(tài)
1>封裝:set方法
2>作用:提供一個方法給外界設(shè)置成員變量值灿渴,可以在方法里面對參數(shù)進行相應過濾
3>方法名必須以set開頭
4> set后面跟上成員變量的名稱绑榴,成員變量的首字母必須大寫
5>返回值一定是void
6>一定要接收一個參數(shù),而且參數(shù)類型跟成員變量類型一致
7>形參的名稱不能跟成員變量名一樣
get方法:
1>作用:返回對象內(nèi)部的成員變量
2>肯定有返回值释树,返回值類型肯定與成員變量類型一致
3>方法名跟成員變量名一樣
4>不需要接收任何參數(shù)
繼承:當某個類繼承了父類就擁有了父類的所有成員變量和方法,同時也可以擴充方法,基本上所有的類都繼承NSObject拾碌,同時子類也也可以重寫父類的方法,父類必須聲明在子類的前面街望,子類不能擁有和父類相同的成員變量校翔,調(diào)用某個方法時,優(yōu)先去當前類中找灾前,如果找不到防症,就去父類中找
多態(tài):簡單來說就是父類的指針指向子類對象,但是父類類型的變量不能直接調(diào)用子類特有的方法哎甲。必須強轉(zhuǎn)為子類類型變量后蔫敲,才能直接調(diào)用子類特有的方法
KVO的使用場景
KVO用于監(jiān)聽對象屬性的改變。
1下拉刷新炭玫、下拉加載監(jiān)聽UIScrollView的contentoffsize奈嘿;
2webview混排監(jiān)聽contentsize;
3監(jiān)聽模型屬性實時更新UI吞加;
4監(jiān)聽控制器frame改變裙犹,實現(xiàn)抽屜效果
KVC的使用場景
KVC使用起來比較簡單,但是它如何查找一個屬性進行讀取呢衔憨?具體查找規(guī)則(假設(shè)現(xiàn)在要利用KVC對a進行讀纫镀浴):
1如果是動態(tài)設(shè)置屬性,則優(yōu)先考慮調(diào)用setA方法践图,如果沒有該方法則優(yōu)先考慮搜索成員變量_a,如果仍然不存在則搜索成員變量a掺冠,如果最后仍然沒搜索到則會調(diào)用這個類的setValue:forUndefinedKey:方法(注意搜索過程中不管這些方法、成員變量是私有的還是公共的都能正確設(shè)置)码党;
2如果是動態(tài)讀取屬性德崭,則優(yōu)先考慮調(diào)用a方法(屬性a的getter方法)悍及,如果沒有搜索到則會優(yōu)先搜索成員變量_a,如果仍然不存在則搜索成員變量a接癌,如果最后仍然沒搜索到則會調(diào)用這個類的valueforUndefinedKey:方法(注意搜索過程中不管這些方法心赶、成員變量是私有的還是公共的都能正確讀取);
十一:GCD和nsoperation對比一下
<1>GCD
GCD是iOS4.0推出的缺猛,主要針對多核cpu做了優(yōu)化缨叫,是C語言的技術(shù)
GCD是將任務(wù)(block)添加到隊列(串行/并行/全局/主隊列),并且以同步/異步的方式執(zhí)行任務(wù)的函數(shù),任務(wù)的取出遵循隊列的FIFO原則:先進先出荔燎,后進后出
GCD提供了一些NSOperation不具備的功能
一次性執(zhí)行:可以保證某一段代碼在程序運行的過程中只被執(zhí)行一次;一次性執(zhí)行是線程安全的,在多線程環(huán)境下也是只執(zhí)行一次;應用場景:設(shè)計單例模式
延遲執(zhí)行:既實現(xiàn)等待多長時間后在哪個隊列中執(zhí)行什么代碼塊
調(diào)度組:監(jiān)聽一組異步任務(wù)執(zhí)行結(jié)束之后,我們能夠得到統(tǒng)一的通知;注意:在其調(diào)度組內(nèi)的任務(wù)執(zhí)行完畢后執(zhí)行后面的”刷新主界面”方法與”玩完”之間的執(zhí)行沒有先后順序;例如:dispatch_group_notify(group,dispatch_get_main_queue(), ^{
//更新UI控件耻姥,提示用戶
NSLog(@"刷新主界面");
});
NSLog(@"玩完");
<2>NSOperation
NSOperation是iOS2.0推出的,iOS4.0之后重寫了NSOperation
NSOperation將操作(異步的任務(wù))添加到隊列(并發(fā)隊列)有咨,就會執(zhí)行指定操作的方法
NSOperation里提供的方便的操作
最大并發(fā)數(shù),
隊列的暫定/繼續(xù)
取消隊列中所有的操作
指定操作之間的依賴關(guān)系(GCD可以用同步實現(xiàn),但是比較麻煩)
?同步和異步?jīng)Q定了要不要開啟新的線程(同步不開,異步開)
同步:在當前線程中執(zhí)行任務(wù)琐簇,不具備開啟新線程的能力
異步:在新的線程中執(zhí)行任務(wù),具備開啟新線程的能力
?串行和并發(fā)決定了任務(wù)的執(zhí)行方式
并發(fā):多個任務(wù)并發(fā)(同時)執(zhí)行
串行:一個任務(wù)執(zhí)行完畢后座享,再執(zhí)行下一個任務(wù)
?當任務(wù)是異步的時候,隊列決定了開啟多少條線程
串行隊列:只開一條
并發(fā)隊列:可以開啟多條
?主隊列特點:主隊列中的任務(wù),只有主線程空閑的時候才會調(diào)度任務(wù)執(zhí)行
主隊列又叫全局串行隊列,程序啟動的時候就創(chuàng)建了主隊列,在使用的時候不需要創(chuàng)建,直接GET.主隊列中的任務(wù)是要在主線程執(zhí)行的.
?主隊列婉商,異步任務(wù)
不開線程,同步執(zhí)行
?主隊列渣叛,同步執(zhí)行
程序執(zhí)行不出來(死鎖)
死鎖的原因丈秩,當程序執(zhí)行到下面這段代碼的時候
主隊列:如果主線程正在執(zhí)行代碼,就不調(diào)度任務(wù)
同步執(zhí)行:如果第一個任務(wù)沒有執(zhí)行淳衙,就繼續(xù)等待第一個任務(wù)執(zhí)行完成蘑秽,再執(zhí)行下一個任務(wù)此時互相等待,程序無法往下執(zhí)行(死鎖)
dispatch_sync(dispatch_get_main_queue(),^{
NSLog(@"%@ -- %d",[NSThreadcurrentThread],i);
});
?主隊列和串行隊列的區(qū)別
串行隊列:必須等待一個任務(wù)執(zhí)行完成箫攀,再調(diào)度另一個任務(wù)
主隊列:以先進先出調(diào)度任務(wù)肠牲,如果主線程上有代碼在執(zhí)行,主隊列不會調(diào)度任務(wù)
?(主隊列靴跛,同步執(zhí)行)放入異步執(zhí)行解決死鎖
dispatch_async(dispatch_get_global_queue(0,0), ^{
NSLog(@"全局隊列缀雳,異步執(zhí)行%@",[NSThread currentThread]);
//此時這行代碼在子線程中運行,同步執(zhí)行不用等待主線程執(zhí)行此同步執(zhí)行的任務(wù)
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"主隊列,同步執(zhí)行%@",[NSThread currentThread]);
});
NSLog(@"==");
});
?全局隊列本質(zhì)就是并發(fā)隊列
dispatch_get_global_queue(0,0);
?全局隊列和并發(fā)隊列的區(qū)別
并發(fā)隊列有名稱汤求,可以跟蹤錯誤俏险,全局隊列沒有
全局隊列在ARC中不需要考慮釋放內(nèi)存严拒,dispatch_release(q);不允許調(diào)用扬绪。并發(fā)隊列在MRC中需要手動釋放內(nèi)存,因為并發(fā)隊列是create創(chuàng)建出來的在MRC中見到create就要release裤唠,全局隊列不需要release(只有一個)
一般我們使用全局隊列,因為使用起來更加簡單
<3>綜合比較其各自使用范圍如下
性能:①:GCD更接近底層挤牛,而NSOperationQueue則更高級抽象,所以GCD在追求性能的底層操作來說种蘸,是速度最快的墓赴。這取決于使用Instruments進行代碼性能分析竞膳,如有必要的話
②:從異步操作之間的事務(wù)性,順序行诫硕,依賴關(guān)系坦辟。GCD需要自己寫更多的代碼來實現(xiàn),而NSOperationQueue已經(jīng)內(nèi)建了這些支持
③:如果異步操作的過程需要更多的被交互和UI呈現(xiàn)出來章办,NSOperationQueue會是一個更好的選擇锉走。底層代碼中,任務(wù)之間不太互相依賴藕届,而需要更高的并發(fā)能力挪蹭,GCD則更有優(yōu)勢
十五:OC屬性修飾符
訪問修飾符:用來修飾屬性.可以限定對象的屬性在那1段范圍之中訪問.
?@private:私有被@private修飾的屬性只能在本類的內(nèi)部訪問.只能在本類的方法實現(xiàn)中訪問.
?@protected:受保護的.被@protected修飾的屬性只能在本類和本類的子類中訪問.只能在本類和子類的方法實現(xiàn)中訪問.
?@package:被@package修飾的屬性可以在當前框架中訪問.
@public:公共的.被@public修飾的屬性可以在任意的地方訪問.
十六:重寫,覆蓋,重載,多態(tài)之間的差別
首先注意:
(1)重載概念只出現(xiàn)在java和c++中,在c語言和oc中沒有重載這個概念,重寫和多態(tài)在oc中才有
override->重寫(=覆蓋)、overload->重載休偶、polymorphism
->多態(tài)
(2)override是重寫(覆蓋)了一個方法梁厉,以實現(xiàn)不同的功能。一般是用于子類在繼承父類時踏兜,重寫(重新實現(xiàn))父類中的方法词顾。
重寫(覆蓋)的規(guī)則:
1、重寫方法的參數(shù)列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是重載.
2碱妆、重寫方法的訪問修飾符一定要大于被重寫方法的訪問修飾符(public>protected>default>private)计技。
3、重寫的方法的返回值必須和被重寫的方法的返回一致山橄;
4垮媒、重寫的方法所拋出的異常必須和被重寫方法的所拋出的異常一致,或者是其子類航棱;
5睡雇、被重寫的方法不能為private,否則在其子類中只是新定義了一個方法饮醇,并沒有對其進行重寫它抱。
6、靜態(tài)方法不能被重寫為非靜態(tài)的方法(會編譯出錯)朴艰。
(3)
多態(tài)的概念比較復雜观蓄,有多種意義的多態(tài),一個有趣但不嚴謹?shù)恼f法是:繼承是子類使用父類的方法祠墅,而多態(tài)則是父類使用子類的方法侮穿。
一般,我們使用多態(tài)是為了避免在父類里大量重載引起代碼臃腫且難于維護毁嗦。
overload是重載亲茅,一般是用于在一個類內(nèi)實現(xiàn)若干重載的方法,這些方法的名稱相同而參數(shù)形式不同。
重載的規(guī)則:
1克锣、在使用重載時只能通過相同的方法名茵肃、不同的參數(shù)形式實現(xiàn)。不同的參數(shù)類型可以是不同的參數(shù)類型袭祟,不同的參數(shù)個數(shù)验残,不同的參數(shù)順序(參數(shù)類型必須不一樣);
2巾乳、不能通過訪問權(quán)限胚膊、返回類型、拋出的異常進行重載想鹰;
3紊婉、方法的異常類型和數(shù)目不會對重載造成影響;
十八:.h中的變量外界可以直接訪問么?(注意是變量,不是property)
答:http://www.cnblogs.com/wangerxiansheng/p/4296797.html
方法的創(chuàng)建:
.h聲明文件只定義方法的格式辑舷。并不去實現(xiàn)方法體喻犁。
方法- (void)setAge: (int)age;表示定義一個動態(tài)方法,返回值為void型何缓,方法名是setAge:肢础,參數(shù)類型為int型,參數(shù)名為age碌廓。
注意:在OC中
“-”:動態(tài)方法(對象的方法)传轰;“+”:靜態(tài)方法(類的方法)。
一個參數(shù)一個冒號谷婆,方法名包括冒號(方法名為setAge:)慨蛙。
在.h文件中定義的方法默認都是public類型的,不能更改纪挎。若要定義私有方法期贫,則應該直接在.m文件定義并實現(xiàn)。
OC定義方法時异袄,返回值類型和參數(shù)類型都必須放在括號()里通砍。
定義成員變量:
成員變量的作用域有3種:
@public全局都可訪問;
@protected本類和子類可訪問烤蜕;
@private只有本類可以訪問封孙。
在.h文件中聲明的成員變量默認都是@protected型的。
注意:成員變量是聲明在.h文件中的{}內(nèi)部的讽营。也可以說聲明成員變量時必須用{}包谆⒓伞!
十九:1.什么是arc斑匪?(arc是為了解決什么問題誕生的呐籽?)
首先解釋ARC: automatic reference counting自動引用計數(shù)。
ARC幾個要點:
在對象被創(chuàng)建時retain count +1蚀瘸,在對象被release時retain count -1.當retain count為0時狡蝶,銷毀對象。
程序中加入autoreleasepool的對象會由系統(tǒng)自動加上autorelease方法贮勃,如果該對象引用計數(shù)為0贪惹,則銷毀。
那么ARC是為了解決什么問題誕生的呢寂嘉?這個得追溯到MRC手動內(nèi)存管理時代說起奏瞬。
MRC下內(nèi)存管理的缺點:
1.當我們要釋放一個堆內(nèi)存時,首先要確定指向這個堆空間的指針都被release了泉孩。(避免提前釋放)
2.釋放指針指向的堆空間硼端,首先要確定哪些指針指向同一個堆,這些指針只能釋放一次寓搬。(MRC下即誰創(chuàng)建珍昨,誰釋放,避免重復釋放)
3.模塊化操作時句喷,對象可能被多個模塊創(chuàng)建和使用镣典,不能確定最后由誰去釋放。
4.多線程操作時唾琼,不確定哪個線程最后使用完畢
二十:請解釋以下keywords的區(qū)別:assignvs weak, __block vs __weak?
assign適用于基本數(shù)據(jù)類型兄春,(iOS中的垃圾處理機制是根據(jù)一個對象的索引數(shù)來處理的,為0的時候表示沒有地方使用該對象锡溯,則該對象將被清除赶舆,而基本數(shù)據(jù)類型不屬于對象,它的創(chuàng)建和使用都是在內(nèi)存中祭饭,超出對應方法體即被清除涌乳,所以不需要使用垃圾處理機制,無需記錄索引值甜癞,所以使用assgin);
assign其實也可以用來修飾對象夕晓,那么我們?yōu)槭裁床挥盟兀恳驗楸籥ssign修飾的對象在釋放之后悠咱,指針的地址還是存在的蒸辆,也就是說指針并沒有被置為nil。如果在后續(xù)的內(nèi)存分配中析既,剛好分到了這塊地址躬贡,程序就會崩潰掉。
weak是適用于NSObject對象眼坏,并且是一個弱引用拂玻。而weak修飾的對象在釋放之后,指針地址會被置為nil。所以現(xiàn)在一般弱引用就是用weak檐蚜。
首先__block是用來修飾一個變量魄懂,這個變量就可以在block中被修改(參考block實現(xiàn)原理)
__block:使用__block修飾的變量在block代碼快中會被retain(ARC下,MRC下不會retain)
__weak:使用__weak修飾的變量不會在block代碼塊中被retain
同時闯第,在ARC下市栗,要避免block出現(xiàn)循環(huán)引用__weak typedof(self)weakSelf = self;
二十一:基本數(shù)據(jù)類型與對象有何不同?
行為:
基本類型只是一個值,沒有任何行為
對象類型有自己的行為
內(nèi)存分配:
基本類型在棧內(nèi)分配
對象在堆內(nèi)分配
對象引用保存在棧內(nèi)
引用與值:
基本類型是值類型咳短,僅表示一個值填帽,保存在棧內(nèi)
引用類型分兩部分,對象引用保存在棧內(nèi)咙好,對象保存在堆內(nèi)篡腌,
訪問變量,是使用的引用找對象
二十二:使用nonatomic一定是線程安全的嗎勾效?
不是的哀蘑。
Atomic原子操作,系統(tǒng)會為setter方法加鎖葵第。具體使用@synchronized(self){//code }
nonatomic不會為setter方法加鎖绘迁。
atomic:線程安全,需要消耗大量系統(tǒng)資源來為屬性加鎖
nonatomic:非線程安全卒密,適合內(nèi)存較小的移動設(shè)備
二十三:與后臺進行數(shù)據(jù)交互的時候遇到過什么問題么?
答:報錯3840因為AFN框架不能解析未做處理的json數(shù)據(jù),出現(xiàn)這種情況時缀台,一般是json數(shù)據(jù)中的不規(guī)范造成的,json數(shù)據(jù)中也許有轉(zhuǎn)義字符的出現(xiàn)導致了這種情況哮奇,如有/t/n/0等出現(xiàn),把解析得到的NSData數(shù)據(jù)解析成為字符串形式膛腐,判斷數(shù)據(jù)中是否含有這些轉(zhuǎn)義字符,含有的話用空字符串替換掉鼎俘,再把字符串轉(zhuǎn)換為NSData類型的數(shù)據(jù)哲身,然后進行解析為JSon數(shù)據(jù)
數(shù)據(jù)不太規(guī)范解決方法:1.后臺修改數(shù)據(jù)
報錯404網(wǎng)址有錯誤,連接不到網(wǎng)頁
二十四:簡單談一下你對runtime的理解以及其應用案例
http://www.reibang.com/p/a31edc4400a1
http://www.cocoachina.com/ios/20160406/15733.html
二十五:數(shù)據(jù)轉(zhuǎn)模型礦架MJExtension的理解
http://www.reibang.com/p/93c242452b9b
二十六: 3.UIView與CALayer有什么區(qū)別?
1)UIView屬于UIKit框架贸伐,CALayer屬于QuartzCore框架勘天;
2)CALayer比UIView更加輕量級別,但是可以實現(xiàn)同樣的效果;
3)UIView可以處理用戶的觸摸事件捉邢,而CALayer不可以脯丝;
4)UIView中有個屬性是layer;
5)UIView是視圖界面的元素伏伐,而CALayer是繪制內(nèi)容宠进;
二十七:#import和#include的區(qū)別?@class的作用藐翎?
#import完整的包含某個文件的內(nèi)容材蹬,不會引發(fā)交叉編譯实幕,
#include是C/C++中導入頭文件的關(guān)鍵字,完整的包含某個文件的內(nèi)容堤器,
@class僅僅是聲明一個類名昆庇,可解決循環(huán)包含的問題。
二十八:對于語句NSString *obj =[[NSData alloc] init]; objc在編譯時和運行時分別是什么類型的對象吼旧?
編譯時:NSString凰锡;運行時:NSData未舟。
二十九:核心服務(wù)層(Core Services Layer):為程序提供基礎(chǔ)的系統(tǒng)服務(wù)例如網(wǎng)絡(luò)訪問圈暗、瀏覽器引擎、定位裕膀、文件訪問员串、數(shù)據(jù)庫訪問等,主要包含以下框架:
CFNetwork(網(wǎng)絡(luò)訪問)
Core Data(數(shù)據(jù)存儲)
Core Location(定位功能)
Core Motion(重力加速度昼扛,陀螺儀)
Foundation(基礎(chǔ)功能如NSString)
Webkit(瀏覽器引擎)
JavaScript(JavaScript引擎)
媒體層(Media Layer):主要提供圖像引擎寸齐、音頻引擎、視頻引擎框架抄谐。
圖像引擎(Core Graphics渺鹦、Core Image、Core
Animation蛹含、OpenGL ES)
音頻引擎(Core Audio毅厚、AV
Foundation、OpenAL)
視頻引擎(AV Foundation浦箱、Core Media)
可觸摸層(Cocoa Touch
Layer):主要提供用戶交互相關(guān)的服務(wù)如界面控件吸耿、事件管理、通知中心酷窥、地圖咽安,包含以下框架:
UIKit(界面相關(guān))
EventKit(日歷事件提醒等)
Notification
Center(通知中心)
MapKit(地圖顯示)
Address Book(聯(lián)系人)
iAd(廣告)
Message UI(郵件與SMS顯示)
PushKit(iOS8新push機制)
三十:你是怎么保存用戶的登錄狀態(tài)的,用戶名和密碼你是怎么保存的蓬推?
http://blog.csdn.net/xn4545945/article/details/36755117
加密,解密的過程,公鑰,私鑰是如何使用的
http://www.8btc.com/passwordd/
加密的幾個階段
1:簡單的對用戶名和密碼進行MD5加密<可以用暴力碰撞進行破解,因為相同的字符通過哈希算法得到的值是一樣的>
2:對用戶名和密碼進行先加鹽(既加一段隨機的字符串,也叫token),再進行MD5加密
3:對用戶名和密碼進行先加鹽,然后MD5算法;對得到的數(shù)據(jù)綁定一個時間戳,再用私鑰加密,最后儲存到服務(wù)器上<用時間+公鑰解密與客戶端發(fā)送的密碼進行比較,服務(wù)器還要檢查發(fā)送密碼的時間差>
三十一:iOS開發(fā)——XML/JSON數(shù)據(jù)解析
http://www.reibang.com/p/a54d367adb2a
?Json格式:
NSJSONSerialization妆棒,官方提供的Json數(shù)據(jù)格式解析類(在ios9.0以后,蘋果用NSURLSession的dataTaskWithRequest方法替代了原先的NSURLConnect的sendSynchronousRequest方法來接收網(wǎng)站返回的response響應,切記雖然用起來步驟比較麻煩,但是效率是最高的)
JSONKit(第三方類庫,因為不支持ARC,導入后會報錯,不過在target里面的Build Phases中導入-fno-objc-arc,再次編譯就好了,效率僅此于原生的)
SBJson(拖入文件中不會報錯)
?XML格式:
NSXMLParse,官方自帶(使用的是sax解析,既逐行解析,采用協(xié)議方法進行回調(diào)的方法,輕量級的不好內(nèi)存)
GDataXML沸伏,Google提供的開元XML解析庫(這是一種dom解析方式,一次性將文件整體導入,在通過查找節(jié)點的方式,讀取數(shù)據(jù);)
三十二:網(wǎng)易新聞頭部滾動條的實現(xiàn)過程
http://www.reibang.com/p/b84f4dd96d0c
打算分為三個部分,滑塊部分View,內(nèi)容顯示部分View,包含滑塊View和顯示內(nèi)容View的View,以便于可以靈活的使用
1.滑塊部分View
1.1要實現(xiàn)滑塊可以滾動,考慮可以直接使用collectionView,但是這里還是直接使用scrollView方便里面的控件布局
1.2要實現(xiàn)滑塊的點擊,可以直接使用UIButton,但是經(jīng)過嘗試,要讓button的frame隨著文字的寬度來自適應實現(xiàn)比較麻煩,所以選擇了使用UILabel添加點擊手勢來實現(xiàn)點擊事件,這里使用了closures來實現(xiàn)(可以使用代理模式)
1.3實現(xiàn)對應的滾動條和遮蓋同步移動的效果,文字顏色漸變功能(在點擊的時候直接使用一個動畫就可以簡單的完成了)
2.內(nèi)容顯示部分View
2.1用來作為包含子控制器的view的容器,并且實現(xiàn)可以分頁滾動的效果
2.2要實現(xiàn)分頁滾動,可以使用UIScrollView來實現(xiàn),但是這樣就要考慮UIScrollView上的各個view的復用的問題,其中細節(jié)還是很麻煩,所以直接使用了UICollectionView(利用他的重用機制)來實現(xiàn)
2.3將每一個子控制器的view直接添加到對應的每一個cell的contentView中來展示,所以這里需要注意cell重用可能帶來的內(nèi)容顯示不正常的問題,這里采用了每次添加contentView的內(nèi)容時移除所有的subviews(也可以直接給每個cell用不同的reuseIdentifier實現(xiàn))
2.4實現(xiàn)實時監(jiān)控滾動的進度提供給滑塊部分來同步調(diào)整滾動條和遮蓋,文字顏色的漸變,并且在每次滾動完成的時候可以通知給滑塊來調(diào)整他的內(nèi)容
3.包含滑塊View和顯示內(nèi)容View的View
3.1因為滑塊部分View和內(nèi)容顯示部分View是相對獨立的部分,在這里只需要實現(xiàn)兩者的通信即可
3.2可以自定義滑塊部分View和內(nèi)容顯示部分View的frame
三十三:XMPP通訊協(xié)議
http://www.reibang.com/p/3167802eb1e5
即時通訊之環(huán)信的應用
http://www.reibang.com/p/73be68baa1ac
三十五:檢測內(nèi)存泄露的小工具
http://www.cocoachina.com/ios/20160329/15803.html
監(jiān)測內(nèi)存泄露的小工具:
block長什么樣募逞?它大概長這樣子:一個^后面有{和},介于此我們就能查到幾乎所有代碼里面的block了馋评,那么block里面的self怎么識別放接?weakSelf算嗎,當然不算留特,按照語法:如果一個self字段它的前后都不是字母數(shù)字下劃線(好好理解下這句話)纠脾,那它就是我們要找的self玛瘸。按著這個思路block里面的self便無所遁形了。然后按著如下寫腳本(代碼在文末):
(1)遍歷工程里面的所有.m文件
(2)查找^
(3)匹配后面的一對{}記住位置
(4)查找{}里面符合規(guī)則的self
運行xcode自帶的shell腳本
三十六:iOS上傳數(shù)據(jù)到服務(wù)器
http://www.reibang.com/p/e1d59ab0bf1a
結(jié)合上面兩個方法可知,上傳平常的數(shù)據(jù)和上傳圖片不一樣的地方就是下面這兩行代碼了,就是在發(fā)送POST請求時,請求頭里面記錄著要上傳的是圖片還是一般的數(shù)據(jù).
上傳一般的數(shù)據(jù):
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
上傳圖片:
[request addValue:@"image/jpeg" forHTTPHeaderField:@"Content-Type"]; [request addValue:@"text/html" forHTTPHeaderField:@"Accept"];
深入解析POST上傳-->AFNetworking的底層理解
http://www.cnblogs.com/worldtraveler/p/4736643.html
http://www.reibang.com/p/2b75932d2f92
為何使用AFNetworking
四十:控制器之間跳轉(zhuǎn)的幾種方法
http://www.mamicode.com/info-detail-469709.html
四十一:保存用戶名和密碼
http://blog.sina.com.cn/s/blog_71715bf801018v33.html
四十三:在ARC機制下利用leaks查找內(nèi)存泄露
http://www.reibang.com/p/f3d130ff807b
四十四:多線程的幾種表達方式
http://www.reibang.com/p/054723d94f9d
四十五:const char*, char const*, char*const的區(qū)別
http://blog.csdn.net/yingxunren/article/details/3968800
四十七:正則表達式(初級學習)
http://www.reibang.com/p/d332e9fe33f3
自定義iOS7導航欄背景,標題和返回按鈕文字顏色
四十九:iOS 繪制1像素的線
http://www.cnblogs.com/smileEvday/p/iOS_PixelVsPoint.html
五十:Label用法總結(jié)
http://blog.sina.com.cn/s/blog_bf9843bf0101f7z7.html
#五十二:iOS自定義 中間凸出的 tabbar 仿閑魚
http://www.reibang.com/p/d905387797c6