iOS 面試必看举娩,最全梳理(下)

鏈接:http://www.reibang.com/p/5d2163640e26


如何進(jìn)行網(wǎng)絡(luò)消息推送


一種是Apple自己提供的通知服務(wù)(APNS服務(wù)器)斜友、一種是用第三方推送機(jī)制织咧。

首先應(yīng)用發(fā)送通知哄啄,系統(tǒng)彈出提示框詢問(wèn)用戶是否允許,當(dāng)用戶允許后向蘋果服務(wù)器(APNS)請(qǐng)求deviceToken懈息,并由蘋果服務(wù)器發(fā)送給自己的應(yīng)用肾档,自己的應(yīng)用將DeviceToken發(fā)送自己的服務(wù)器,自己服務(wù)器想要發(fā)送網(wǎng)絡(luò)推送時(shí)將deviceToken以及想要推送的信息發(fā)送給蘋果服務(wù)器辫继,蘋果服務(wù)器將信息發(fā)送給應(yīng)用怒见。

推送信息內(nèi)容,總?cè)萘坎怀^(guò)256個(gè)字節(jié)姑宽;

iOS SDK本身提供的APNS服務(wù)器推送遣耍,它可以直接推送給目標(biāo)用戶并根據(jù)您的方式彈出提示。

優(yōu)點(diǎn):不論應(yīng)用是否開(kāi)啟炮车,都會(huì)發(fā)送到手機(jī)端舵变;

缺點(diǎn):消息推送機(jī)制是蘋果服務(wù)端控制,個(gè)別時(shí)候可能會(huì)有延遲示血,因?yàn)樘O果服務(wù)器也有隊(duì)列來(lái)處理所有的消息請(qǐng)求棋傍;

第三方推送機(jī)制,普遍使用Socket機(jī)制來(lái)實(shí)現(xiàn)难审,幾乎可以達(dá)到即時(shí)的發(fā)送到目標(biāo)用戶手機(jī)端瘫拣,適用于即時(shí)通訊類應(yīng)用。

優(yōu)點(diǎn):實(shí)時(shí)的告喊,取決于心跳包的節(jié)奏麸拄;

缺點(diǎn):iOS系統(tǒng)的限制,應(yīng)用不能長(zhǎng)時(shí)間的后臺(tái)運(yùn)行黔姜,所以應(yīng)用關(guān)閉的情況下這種推送機(jī)制不可用拢切。


網(wǎng)絡(luò)七層協(xié)議


應(yīng)用層:

1.用戶接口、應(yīng)用程序秆吵;

2.Application典型設(shè)備:網(wǎng)關(guān)挑社;

3.典型協(xié)議捞附、標(biāo)準(zhǔn)和應(yīng)用:TELNET己肮、FTP、HTTP

表示層:

1.數(shù)據(jù)表示泻拦、壓縮和加密presentation

2.典型設(shè)備:網(wǎng)關(guān)

3.典型協(xié)議、標(biāo)準(zhǔn)和應(yīng)用:ASCLL忽媒、PICT争拐、TIFF、JPEG|MPEG

4.表示層相當(dāng)于一個(gè)東西的表示晦雨,表示的一些協(xié)議架曹,比如圖片、聲音和視頻MPEG闹瞧。

會(huì)話層:

1.會(huì)話的建立和結(jié)束绑雄;

2.典型設(shè)備:網(wǎng)關(guān);

3.典型協(xié)議夹抗、標(biāo)準(zhǔn)和應(yīng)用:RPC绳慎、SQL纵竖、NFS漠烧、X WINDOWS、ASP

傳輸層:

1.主要功能:端到端控制Transport靡砌;

2.典型設(shè)備:網(wǎng)關(guān)已脓;

3.典型協(xié)議、標(biāo)準(zhǔn)和應(yīng)用:TCP通殃、UDP度液、SPX

網(wǎng)絡(luò)層:

1.主要功能:路由、尋址Network画舌;

2.典型設(shè)備:路由器堕担;

3.典型協(xié)議、標(biāo)準(zhǔn)和應(yīng)用:IP曲聂、IPX霹购、APPLETALK、ICMP朋腋;

數(shù)據(jù)鏈路層:

1.主要功能:保證無(wú)差錯(cuò)的疏忽鏈路的data link齐疙;

2.典型設(shè)備:交換機(jī)、網(wǎng)橋旭咽、網(wǎng)卡贞奋;

3.典型協(xié)議、標(biāo)準(zhǔn)和應(yīng)用:802.2穷绵、802.3ATM轿塔、HDLC、FRAME RELAY;

物理層:

1.主要功能:傳輸比特流Physical勾缭;

2.典型設(shè)備:集線器洽议、中繼器

3.典型協(xié)議、標(biāo)準(zhǔn)和應(yīng)用:V.35漫拭、EIA/TIA-232.


對(duì)NSUserDefaults的理解


NSUserDefaults:系統(tǒng)提供的一種存儲(chǔ)數(shù)據(jù)的方式亚兄,主要用于保存少量的數(shù)據(jù),默認(rèn)存儲(chǔ)到library下的Preferences文件夾采驻。


SDWebImage原理


調(diào)用類別的方法:


從內(nèi)存中(字典)找圖片(當(dāng)這個(gè)圖片在本次程序加載過(guò))审胚,找到直接使用;

從沙盒中找礼旅,找到直接使用膳叨,緩存到內(nèi)存。

從網(wǎng)絡(luò)上獲取痘系,使用菲嘴,緩存到內(nèi)存,緩存到沙盒汰翠。


OC中是否有二維數(shù)組龄坪,如何實(shí)現(xiàn)二維數(shù)組


OC中沒(méi)有二維數(shù)組,可通過(guò)嵌套數(shù)組實(shí)現(xiàn)二維數(shù)組复唤。


LayoutSubViews在什么時(shí)候被調(diào)用健田?


當(dāng)View本身的frame改變時(shí),會(huì)調(diào)用這個(gè)方法佛纫。


深拷貝和淺拷貝


如果對(duì)象有個(gè)指針型成員變量指向內(nèi)存中的某個(gè)資源妓局,那么如何復(fù)制這個(gè)對(duì)象呢?你會(huì)只是復(fù)制指針的值傳給副本的新對(duì)象嗎呈宇?指針只是存儲(chǔ)內(nèi)存中資源地址的占位符好爬。在復(fù)制操作中,如果只是將指針復(fù)制給新對(duì)象甥啄,那么底層的資源實(shí)際上仍然由兩個(gè)實(shí)例在共享存炮。




示例圖1


淺復(fù)制:兩個(gè)實(shí)例的指針仍指向內(nèi)存中的同一資源,只復(fù)制指針值而不是實(shí)際資源型豁;

深復(fù)制:不僅復(fù)制指針值僵蛛,還復(fù)制指向指針?biāo)赶虻馁Y源。如下圖:



示例圖2


單例模式理解與使用


單例模式是一種常用設(shè)計(jì)模式迎变,單例模式是一個(gè)類在系統(tǒng)中只有一個(gè)實(shí)例對(duì)象充尉。通過(guò)全局的一個(gè)入口點(diǎn)對(duì)這個(gè)實(shí)例對(duì)象進(jìn)行訪問(wèn);

iOS中單例模式的實(shí)現(xiàn)方式一般分為兩種:非ARC和ARC+GCD衣形。


對(duì)沙盒的理解


每個(gè)iOS應(yīng)用都被限制在“沙盒”中驼侠,沙盒相當(dāng)于一個(gè)加了僅主人可見(jiàn)權(quán)限的文件夾姿鸿,及時(shí)在應(yīng)用程序安裝過(guò)程中,系統(tǒng)為每個(gè)單獨(dú)的應(yīng)用程序生成它的主目錄和一些關(guān)鍵的子目錄倒源。蘋果對(duì)沙盒有幾條限制:


1. 應(yīng)用程序在自己的沙盒中運(yùn)作苛预,但是不能訪問(wèn)任何其他應(yīng)用程序的沙盒;

2. 應(yīng)用之間不能共享數(shù)據(jù)笋熬,沙盒里的文件不能被復(fù)制到其他

應(yīng)用程序的文件夾中热某,也不能把其他應(yīng)用文件夾復(fù)制到沙盒中;

3. 蘋果禁止任何讀寫沙盒以外的文件胳螟,禁止應(yīng)用程序?qū)?nèi)容寫到沙盒以外的文件夾中昔馋;

4. 沙盒目錄里有三個(gè)文件夾:Documents——存儲(chǔ)

應(yīng)用程序的數(shù)據(jù)文件,存儲(chǔ)用戶數(shù)據(jù)或其他定期備份的信息糖耸;

Library下有兩個(gè)文件夾秘遏,Caches存儲(chǔ)應(yīng)用程序再次啟動(dòng)所需的信息,

Preferences包含應(yīng)用程序的偏好設(shè)置文件嘉竟,不可在這更改偏好設(shè)置邦危;

temp存放臨時(shí)文件即應(yīng)用程序再次啟動(dòng)不需要的文件。


獲取沙盒根目錄的方法舍扰,有幾種方法:用NSHomeDirectory獲取倦蚪。

獲取Document路徑:

NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES).


對(duì)瀑布流的理解


首先圖片的寬度都是一樣的,1.將圖片等比例壓縮妥粟,讓圖片不變形审丘;2.計(jì)算圖片最低應(yīng)該擺放的位置吏够,哪一列低就放在哪勾给;3.進(jìn)行最優(yōu)排列,在ScrollView的基礎(chǔ)上添加兩個(gè)tableView锅知,然后將之前所計(jì)算的scrollView的高度通過(guò)tableView展示出來(lái)播急。

如何使用兩個(gè)TableView產(chǎn)生聯(lián)動(dòng):將兩個(gè)tableView的滾動(dòng)事件禁止掉,最外層scrollView滾動(dòng)時(shí)將兩個(gè)TableView跟著滾動(dòng)售睹,并且更改contentOffset桩警,這樣產(chǎn)生效果滾動(dòng)的兩個(gè)tableView。


ViewController 的 loadView,昌妹、viewDidLoad,捶枢、viewDidUnload 分別是在什么時(shí)候調(diào)用的?


viewDidLoad在view從nib文件初始化時(shí)調(diào)用飞崖,loadView在controller的view為nil時(shí)調(diào)用烂叔。

此方法在編程實(shí)現(xiàn)view時(shí)調(diào)用,view控制器默認(rèn)會(huì)注冊(cè)memory warning notification,當(dāng)view controller的任何view沒(méi)有用的時(shí)候,viewDidUnload會(huì)被調(diào)用固歪,在這里實(shí)現(xiàn)將retain的view release,如果是retain的IBOutlet view 屬性則不要在這里release,IBOutlet會(huì)負(fù)責(zé)release 蒜鸡。


關(guān)鍵字volatile有什么含意?并給出三個(gè)不同的例子:


一個(gè)定義為volatile的變量是說(shuō)這變量可能會(huì)被意想不到地改變胯努,這樣,編譯器就不會(huì)去假設(shè)這個(gè)變量的值了逢防。精確地說(shuō)就是叶沛,優(yōu)化器在用到這個(gè)變量時(shí)必須每次都小心地重新讀取這個(gè)變量的值,而不是使用保存在寄存器里的備份忘朝。下面是volatile變量的幾個(gè)例子:

? 并行設(shè)備的硬件寄存器(如:狀態(tài)寄存器)灰署;

?一個(gè)中斷服務(wù)子程序中會(huì)訪問(wèn)到的非自動(dòng)變量(Non-automatic variables);

? 多線程應(yīng)用中被幾個(gè)任務(wù)共享的變量局嘁。


@synthesize氓侧、@dynamic的理解


@synthesize是系統(tǒng)自動(dòng)生成getter和setter屬性聲明;@synthesize的意思是,除非開(kāi)發(fā)人員已經(jīng)做了导狡,否則由編譯器生成相應(yīng)的代碼约巷,以滿足屬性聲明;

@dynamic是開(kāi)發(fā)者自已提供相應(yīng)的屬性聲明,@dynamic意思是由開(kāi)發(fā)人員提供相應(yīng)的代碼:對(duì)于只讀屬性需要提供setter旱捧,對(duì)于讀寫屬性需要提供 setter 和getter独郎。查閱了一些資料確定@dynamic的意思是告訴編譯器,屬性的獲取與賦值方法由用戶自己實(shí)現(xiàn), 不自動(dòng)生成。


frame和bounds有什么不同枚赡?


frame指的是:該view在父view坐標(biāo)系統(tǒng)中的位置和大小氓癌。(參照點(diǎn)是父親的坐標(biāo)系統(tǒng))

bounds指的是:該view在本身坐標(biāo)系統(tǒng)中的位置和大小。(參照點(diǎn)是本身坐標(biāo)系統(tǒng))


view的touch事件有哪些贫橙?


?- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

?- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

?- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;



自定義實(shí)現(xiàn)UITabbarController的原理


運(yùn)用字典贪婉,點(diǎn)擊五個(gè)按鈕的一個(gè)可以從字典里選擇一個(gè)控制器對(duì)象,將其View顯示到主控制器視圖上卢肃。


iOS中的響應(yīng)者鏈的工作原理


每一個(gè)應(yīng)用有一個(gè)響應(yīng)者鏈疲迂,我們的視圖結(jié)構(gòu)是一個(gè)N叉樹(shù)(一個(gè)視圖可以有多個(gè)子視圖,一個(gè)子視圖同一時(shí)刻只有一個(gè)父視圖),而每一個(gè)繼承UIResponder的對(duì)象都可以在這個(gè)N叉樹(shù)中扮演一個(gè)節(jié)點(diǎn)莫湘。

當(dāng)葉節(jié)點(diǎn)成為最高響應(yīng)者的時(shí)候尤蒿,從這個(gè)葉節(jié)點(diǎn)開(kāi)始往其父節(jié)點(diǎn)開(kāi)始追朔出一條鏈,那么對(duì)于這一個(gè)葉節(jié)點(diǎn)來(lái)講幅垮,這一條鏈就是當(dāng)前的響應(yīng)者鏈腰池。響應(yīng)者鏈將系統(tǒng)捕獲到的UIEvent與UITouch從葉節(jié)點(diǎn)開(kāi)始層層向下分發(fā),期間可以選擇停止分發(fā)忙芒,也可以選擇繼續(xù)向下分發(fā)示弓。

如需了解更多細(xì)節(jié),請(qǐng)讀這篇文章呵萨。


View和View之間傳值方式


對(duì)象的property屬性傳值奏属;

方法參數(shù)傳值;

NSUserDefault傳值甘桑;

塊傳值拍皮。


property屬性的修飾符的作用


getter=getName歹叮、setter=setName:設(shè)置setter與getter的方法名;

readwrite铆帽、readonly:設(shè)置可供訪問(wèn)級(jí)別咆耿;

assign:方法直接賦值,不進(jìn)行任何retain操作爹橱,為了解決原類型與環(huán)循引用問(wèn)題萨螺;

retain:其setter方法對(duì)參數(shù)進(jìn)行release舊值再retain新值,所有實(shí)現(xiàn)都是這個(gè)順序愧驱;

copy:其setter方法進(jìn)行copy操作慰技,與retain處理流程一樣,先對(duì)舊值release组砚,再copy出新的對(duì)象吻商,retainCount為1。這是為了減少對(duì)上下文的依賴而引入的機(jī)制糟红。

nonatomic:非原子性訪問(wèn)艾帐,不加同步, 多線程并發(fā)訪問(wèn)會(huì)提高性能盆偿。注意柒爸,如果不加此屬性,則默認(rèn)是兩個(gè)訪問(wèn)方法都為原子型事務(wù)訪問(wèn)事扭。


對(duì)于Run Loop的理解


RunLoop捎稚,是多線程的法寶,即一個(gè)線程一次只能執(zhí)行一個(gè)任務(wù)求橄,執(zhí)行完任務(wù)后就會(huì)退出線程今野。主線程執(zhí)行完即時(shí)任務(wù)時(shí)會(huì)繼續(xù)等待接收事件而不退出。非主線程通常來(lái)說(shuō)就是為了執(zhí)行某一任務(wù)的谈撒,執(zhí)行完畢就需要?dú)w還資源腥泥,因此默認(rèn)是不運(yùn)行RunLoop的;

每一個(gè)線程都有其對(duì)應(yīng)的RunLoop啃匿,只是默認(rèn)只有主線程的RunLoop是啟動(dòng)的,其它子線程的RunLoop默認(rèn)是不啟動(dòng)的蛆楞,若要啟動(dòng)則需要手動(dòng)啟動(dòng)溯乒;

在一個(gè)單獨(dú)的線程中,如果需要在處理完某個(gè)任務(wù)后不退出豹爹,繼續(xù)等待接收事件裆悄,則需要啟用RunLoop;

NSRunLoop提供了一個(gè)添加NSTimer的方法臂聋,可以指定Mode光稼,如果要讓任何情況下都回調(diào)或南,則需要設(shè)置Mode為Common模式;

實(shí)質(zhì)上艾君,對(duì)于子線程的runloop默認(rèn)是不存在的采够,因?yàn)樘O果采用了懶加載的方式。如果我們沒(méi)有手動(dòng)調(diào)用[NSRunLoop currentRunLoop]的話冰垄,就不會(huì)去查詢是否存在當(dāng)前線程的RunLoop蹬癌,也就不會(huì)去加載,更不會(huì)創(chuàng)建虹茶。


SQLite中常用的SQL語(yǔ)句


創(chuàng)建表:creat table 表名 (字段名 字段數(shù)據(jù)類型 是否為主鍵, 字段名 字段數(shù)據(jù)類型, 字段名 字段數(shù)據(jù)類型…)逝薪;

增: insert into 表名 (字段1, 字段2…) values (值1, 值2…);

刪: delete from 表名 where 字段 = 值蝴罪;


XIB與Storyboards的優(yōu)缺點(diǎn)


優(yōu)點(diǎn):


XIB:在編譯前就提供了可視化界面董济,可以直接拖控件,也可以直接給控件添加約束要门,更直觀一些感局,而且類文件中就少了創(chuàng)建控件的代碼,確實(shí)簡(jiǎn)化不少暂衡,通常每個(gè)XIB對(duì)應(yīng)一個(gè)類询微。

Storyboard:在編譯前提供了可視化界面,可拖控件狂巢,可加約束撑毛,在開(kāi)發(fā)時(shí)比較直觀,而且一個(gè)storyboard可以有很多的界面唧领,每個(gè)界面對(duì)應(yīng)一個(gè)類文件藻雌,通過(guò)storybard,可以直觀地看出整個(gè)App的結(jié)構(gòu)斩个。


缺點(diǎn):


XIB:需求變動(dòng)時(shí)胯杭,需要修改XIB很大,有時(shí)候甚至需要重新添加約束受啥,導(dǎo)致開(kāi)發(fā)周期變長(zhǎng)做个。XIB載入相比純代碼自然要慢一些。對(duì)于比較復(fù)雜邏輯控制不同狀態(tài)下顯示不同內(nèi)容時(shí)滚局,使用XIB是比較困難的居暖。當(dāng)多人團(tuán)隊(duì)或者多團(tuán)隊(duì)開(kāi)發(fā)時(shí),如果XIB文件被發(fā)動(dòng)藤肢,極易導(dǎo)致沖突太闺,而且解決沖突相對(duì)要困難很多。

Storyboard:需求變動(dòng)時(shí)嘁圈,需要修改storyboard上對(duì)應(yīng)的界面的約束省骂,與XIB一樣可能要重新添加約束蟀淮,或者添加約束會(huì)造成大量的沖突,尤其是多團(tuán)隊(duì)開(kāi)發(fā)钞澳。對(duì)于復(fù)雜邏輯控制不同顯示內(nèi)容時(shí)怠惶,比較困難。當(dāng)多人團(tuán)隊(duì)或者多團(tuán)隊(duì)開(kāi)發(fā)時(shí)略贮,大家會(huì)同時(shí)修改一個(gè)storyboard甚疟,導(dǎo)致大量沖突,解決起來(lái)相當(dāng)困難逃延。


將字符串“2015-04-10”格式化日期轉(zhuǎn)為NSDate類型


NSString *timeStr = @"2015-04-10";

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

formatter.dateFormat = @"yyyy-MM-dd";

formatter.timeZone = [NSTimeZone defaultTimeZone];

NSDate *date = [formatter dateFromString:timeStr];

// 2015-04-09 16:00:00 +0000

NSLog(@"%@", date);


隊(duì)列和多線程的使用原理


在iOS中隊(duì)列分為以下幾種:


串行隊(duì)列:隊(duì)列中的任務(wù)只會(huì)順序執(zhí)行览妖;


dispatch_queue_t q = dispatch_queue_create("...", DISPATCH_QUEUE_SERIAL);


并行隊(duì)列: 隊(duì)列中的任務(wù)通常會(huì)并發(fā)執(zhí)行;


dispatch_queue_t q = dispatch_queue_create("......",DISPATCH_QUEUE_CONCURRENT);


全局隊(duì)列:是系統(tǒng)的揽祥,直接拿過(guò)來(lái)(GET)用就可以讽膏;與并行隊(duì)列類似;


dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);


主隊(duì)列:每一個(gè)應(yīng)用程序?qū)?yīng)唯一主隊(duì)列拄丰,直接GET即可府树;在多線程開(kāi)發(fā)中,使用主隊(duì)列更新UI料按;


dispatch_queue_t q = dispatch_get_main_queue();


更多細(xì)節(jié)見(jiàn)下圖:




來(lái)自簡(jiǎn)書(shū)


內(nèi)存的使用和優(yōu)化的注意事項(xiàng)


重用問(wèn)題:如UITableViewCells奄侠、UICollectionViewCells、UITableViewHeaderFooterViews設(shè)置正確的reuseIdentifier载矿,充分重用垄潮;

盡量把views設(shè)置為不透明:當(dāng)opque為NO的時(shí)候,圖層的半透明取決于圖片和其本身合成的圖層為結(jié)果闷盔,可提高性能弯洗;

不要使用太復(fù)雜的XIB/Storyboard:載入時(shí)就會(huì)將XIB/storyboard需要的所有資源,包括圖片全部載入內(nèi)存逢勾,即使未來(lái)很久才會(huì)使用牡整。那些相比純代碼寫的延遲加載,性能及內(nèi)存就差了很多溺拱;

選擇正確的數(shù)據(jù)結(jié)構(gòu):學(xué)會(huì)選擇對(duì)業(yè)務(wù)場(chǎng)景最合適的數(shù)組結(jié)構(gòu)是寫出高效代碼的基礎(chǔ)逃贝。比如,數(shù)組: 有序的一組值盟迟。使用索引來(lái)查詢很快秋泳,使用值查詢很慢,插入/刪除很慢攒菠。字典: 存儲(chǔ)鍵值對(duì),用鍵來(lái)查找比較快歉闰。集合: 無(wú)序的一組值辖众,用值來(lái)查找很快卓起,插入/刪除很快。

gzip/zip壓縮:當(dāng)從服務(wù)端下載相關(guān)附件時(shí)凹炸,可以通過(guò)gzip/zip壓縮后再下載戏阅,使得內(nèi)存更小,下載速度也更快啤它。

延遲加載:對(duì)于不應(yīng)該使用的數(shù)據(jù)奕筐,使用延遲加載方式。對(duì)于不需要馬上顯示的視圖变骡,使用延遲加載方式离赫。比如,網(wǎng)絡(luò)請(qǐng)求失敗時(shí)顯示的提示界面塌碌,可能一直都不會(huì)使用到渊胸,因此應(yīng)該使用延遲加載。

數(shù)據(jù)緩存:對(duì)于cell的行高要緩存起來(lái)台妆,使得reload數(shù)據(jù)時(shí)翎猛,效率也極高。而對(duì)于那些網(wǎng)絡(luò)數(shù)據(jù)接剩,不需要每次都請(qǐng)求的切厘,應(yīng)該緩存起來(lái),可以寫入數(shù)據(jù)庫(kù)懊缺,也可以通過(guò)plist文件存儲(chǔ)疫稿。

處理內(nèi)存警告:一般在基類統(tǒng)一處理內(nèi)存警告,將相關(guān)不用資源立即釋放掉

重用大開(kāi)銷對(duì)象:一些objects的初始化很慢桐汤,比如NSDateFormatter和NSCalendar而克,但又不可避免地需要使用它們。通常是作為屬性存儲(chǔ)起來(lái)怔毛,防止反復(fù)創(chuàng)建员萍。

避免反復(fù)處理數(shù)據(jù):許多應(yīng)用需要從服務(wù)器加載功能所需的常為JSON或者XML格式的數(shù)據(jù)。在服務(wù)器端和客戶端使用相同的數(shù)據(jù)結(jié)構(gòu)很重要;

使用Autorelease Pool:在某些循環(huán)創(chuàng)建臨時(shí)變量處理數(shù)據(jù)時(shí)拣度,自動(dòng)釋放池以保證能及時(shí)釋放內(nèi)存;

正確選擇圖片加載方式:詳情閱讀細(xì)讀UIImage加載方式


UIViewController的完整生命周期


-[ViewController initWithNibName:bundle:]碎绎;

-[ViewController init];

-[ViewController loadView]抗果;

-[ViewController viewDidLoad]筋帖;

-[ViewController viewWillDisappear:];

-[ViewController viewWillAppear:]冤馏;

-[ViewController viewDidAppear:]日麸;

-[ViewController viewDidDisappear:];


UIImageView添加圓角


最直接的方法就是使用如下屬性設(shè)置:


imgView.layer.cornerRadius = 10;

// 這一行代碼是很消耗性能的

imgView.clipsToBounds = YES;


**這是離屏渲染(off-screen-rendering),消耗性能的**

給UIImage添加生成圓角圖片的擴(kuò)展API:這是on-screen-rendering


- (UIImage *)imageWithCornerRadius:(CGFloat)radius {

CGRect rect = (CGRect){0.f, 0.f, self.size};


UIGraphicsBeginImageContextWithOptions(self.size, NO, UIScreen.mainScreen.scale);

CGContextAddPath(UIGraphicsGetCurrentContext(),

[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:radius].CGPath);

CGContextClip(UIGraphicsGetCurrentContext());


[self drawInRect:rect];

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();


UIGraphicsEndImageContext();


return image;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末代箭,一起剝皮案震驚了整個(gè)濱河市墩划,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嗡综,老刑警劉巖乙帮,帶你破解...
    沈念sama閱讀 212,222評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異极景,居然都是意外死亡察净,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門盼樟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)氢卡,“玉大人,你說(shuō)我怎么就攤上這事恤批∫煳牵” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,720評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵喜庞,是天一觀的道長(zhǎng)诀浪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)延都,這世上最難降的妖魔是什么雷猪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,568評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮晰房,結(jié)果婚禮上求摇,老公的妹妹穿的比我還像新娘。我一直安慰自己殊者,他們只是感情好与境,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著猖吴,像睡著了一般摔刁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上海蔽,一...
    開(kāi)封第一講書(shū)人閱讀 49,879評(píng)論 1 290
  • 那天共屈,我揣著相機(jī)與錄音,去河邊找鬼党窜。 笑死拗引,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的幌衣。 我是一名探鬼主播矾削,決...
    沈念sama閱讀 39,028評(píng)論 3 409
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了怔软?” 一聲冷哼從身側(cè)響起垦细,我...
    開(kāi)封第一講書(shū)人閱讀 37,773評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤择镇,失蹤者是張志新(化名)和其女友劉穎挡逼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體腻豌,經(jīng)...
    沈念sama閱讀 44,220評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡家坎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吝梅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虱疏。...
    茶點(diǎn)故事閱讀 38,697評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖苏携,靈堂內(nèi)的尸體忽然破棺而出做瞪,到底是詐尸還是另有隱情,我是刑警寧澤右冻,帶...
    沈念sama閱讀 34,360評(píng)論 4 332
  • 正文 年R本政府宣布装蓬,位于F島的核電站,受9級(jí)特大地震影響纱扭,放射性物質(zhì)發(fā)生泄漏牍帚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評(píng)論 3 315
  • 文/蒙蒙 一乳蛾、第九天 我趴在偏房一處隱蔽的房頂上張望暗赶。 院中可真熱鬧,春花似錦肃叶、人聲如沸蹂随。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,782評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)岳锁。三九已至,卻和暖如春筛欢,著一層夾襖步出監(jiān)牢的瞬間浸锨,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,010評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工版姑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柱搜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,433評(píng)論 2 360
  • 正文 我出身青樓剥险,卻偏偏與公主長(zhǎng)得像聪蘸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容