- @synthesize和@dynamic分別有什么作用?
@property有兩個(gè)對應(yīng)的詞桶错,一個(gè)是@synthesize,一個(gè)是dynamic,默認(rèn)是@synthesize 见转,會(huì)自動(dòng)生成下劃線成員變量的getter和setter方法,
而dynamic會(huì)告訴編譯器:屬性的setter和getter方法由用戶自己實(shí)現(xiàn)蒜哀,不自動(dòng)生成斩箫,假如一個(gè)屬性被聲明為@dynamic,而又沒有提供getter 和setter方法撵儿,編譯時(shí)不會(huì)有問題校焦,而當(dāng)程序運(yùn)行時(shí),當(dāng)用到getter和setter方法的以后程序就會(huì)crash统倒,這就是所謂的動(dòng)態(tài)綁定寨典。
- ARC下,不顯式指定任何屬性關(guān)鍵字時(shí)房匆,默認(rèn)的關(guān)鍵字都有哪些耸成?
對于基本數(shù)據(jù)類型:atomic、readwrite浴鸿、assign
對于對象:atomic井氢、readwrite、strong
- 用@property聲明的NSString(或NSArray岳链,NSDictionary)經(jīng)常使用copy關(guān)鍵字花竞,為什么?如果改用strong關(guān)鍵字掸哑,可能造成什么問題约急?
- 因?yàn)楦割愔羔樋梢灾赶蜃宇悓ο?使用 copy 的目的是為了讓本對象的屬性不受外界影響,使用 copy 無論給我傳入是一個(gè)可變對象還是不可對象,我本身持有的就是一個(gè)不可變的副本.
- 如果我們使用是 strong ,那么這個(gè)屬性就有可能指向一個(gè)可變對象,如果這個(gè)可變對象在外部被修改了,那么會(huì)影響該屬性.
- copy設(shè)置方法不保留新值,而是將其”拷貝“苗分。NSString用copy是為了保護(hù)其封裝性厌蔽,防止字符串的值在對象不知情的情況下遭人修改
原文鏈接
- @synthesize合成實(shí)例變量的規(guī)則是什么?假如property名為foo摔癣,存在一個(gè)名為_foo的實(shí)例變量奴饮,那么還會(huì)自動(dòng)合成新變量么?
- 如果指定了成員變量的名稱,會(huì)生成一個(gè)指定的名稱的成員變量,
- 如果這個(gè)成員已經(jīng)存在了就不再生成了.
- 如果是 @synthesize foo;
還會(huì)生成一個(gè)名稱為foo的成員變量择浊,也就是說:
如果沒有指定成員變量的名稱會(huì)自動(dòng)生成一個(gè)屬性同名的成員變量,- 如果是 @synthesize foo = _foo;
就不會(huì)生成成員變量了.
不會(huì)
原文鏈接
- 在有了自動(dòng)合成屬性實(shí)例變量之后戴卜,@synthesize還有哪些使用場景?
實(shí)例變量 = 成員變量 = ivar
當(dāng)想要手動(dòng)管理@property的所有內(nèi)容時(shí)琢岩,會(huì)通過實(shí)現(xiàn) @property 的所有“存取方法”(the accessor methods)或者使用 @dynamic 來達(dá)到這個(gè)目的投剥,這時(shí)編譯器就會(huì)認(rèn)為你打算手動(dòng)管理 @property,于是編譯器就禁用了 autosynthesis(自動(dòng)合成)粘捎。
原文鏈接
- objc中向一個(gè)對象發(fā)送消息[obj foo]和objc_msgSend()函數(shù)之間有什么關(guān)系薇缅?
該方法編譯之后就是objc_msgSend()函數(shù)調(diào)用.
- 什么時(shí)候會(huì)報(bào)unrecognized selector的異常危彩?
當(dāng)調(diào)用該對象上某個(gè)方法,而該對象上沒有實(shí)現(xiàn)這個(gè)方法的時(shí)候, 可以通過“消息轉(zhuǎn)發(fā)”進(jìn)行解決泳桦。
objc在向一個(gè)對象發(fā)送消息時(shí)汤徽,runtime庫會(huì)根據(jù)對象的isa指針找到該對象實(shí)際所屬的類,然后在該類中的方法列表以及其父類方法列表中尋找方法運(yùn)行灸撰,如果谒府,在最頂層的父類中依然找不到相應(yīng)的方法時(shí),程序在運(yùn)行時(shí)會(huì)掛掉并拋出異常unrecognized selector sent to XXX 浮毯。但是在這之前完疫,objc的運(yùn)行時(shí)會(huì)給出三次拯救程序崩潰的機(jī)會(huì):
- Method resolution
objc運(yùn)行時(shí)會(huì)調(diào)用+resolveInstanceMethod:或者 +resolveClassMethod:,讓你有機(jī)會(huì)提供一個(gè)函數(shù)實(shí)現(xiàn)债蓝。如果你添加了函數(shù)壳鹤,那運(yùn)行時(shí)系統(tǒng)就會(huì)重新啟動(dòng)一次消息發(fā)送的過程,否則 饰迹,運(yùn)行時(shí)就會(huì)移到下一步芳誓,消息轉(zhuǎn)發(fā)(Message Forwarding)。- Fast forwarding
如果目標(biāo)對象實(shí)現(xiàn)了-forwardingTargetForSelector:啊鸭,Runtime 這時(shí)就會(huì)調(diào)用這個(gè)方法锹淌,給你把這個(gè)消息轉(zhuǎn)發(fā)給其他對象的機(jī)會(huì)。 只要這個(gè)方法返回的不是nil和self赠制,整個(gè)消息發(fā)送的過程就會(huì)被重啟赂摆,當(dāng)然發(fā)送的對象會(huì)變成你返回的那個(gè)對象。否則钟些,就會(huì)繼續(xù)Normal Fowarding烟号。 這里叫Fast,只是為了區(qū)別下一步的轉(zhuǎn)發(fā)機(jī)制厘唾。因?yàn)檫@一步不會(huì)創(chuàng)建任何新的對象褥符,但下一步轉(zhuǎn)發(fā)會(huì)創(chuàng)建一個(gè)NSInvocation對象,所以相對更快點(diǎn)抚垃。
- Normal forwarding
這一步是Runtime最后一次給你挽救的機(jī)會(huì)。首先它會(huì)發(fā)送-methodSignatureForSelector:消息獲得函數(shù)的參數(shù)和返回值類型趟大。如果-methodSignatureForSelector:返回nil鹤树,Runtime則會(huì)發(fā)出-doesNotRecognizeSelector:消息,程序這時(shí)也就掛掉了逊朽。如果返回了一個(gè)函數(shù)簽名罕伯,Runtime就會(huì)創(chuàng)建一個(gè)NSInvocation對象并發(fā)送-forwardInvocation:消息給目標(biāo)對象
一個(gè)objc對象如何進(jìn)行內(nèi)存布局?(考慮有父類的情況)
一個(gè)objc對象的isa的指針指向什么叽讳?有什么作用追他?
指向他的類對象,從而可以找到對象上的方法
- runtime如何通過selector找到對應(yīng)的IMP地址坟募?(分別考慮類方法和實(shí)例方法)
每一個(gè)類對象中都一個(gè)方法列表,方法列表中記錄著方法的名稱,方法實(shí)現(xiàn),以及參數(shù)類型,其實(shí)selector本質(zhì)就是方法名稱,通過這個(gè)方法名稱就可以在方法列表中找到對應(yīng)的方法實(shí)現(xiàn).
- 使用runtime Associate方法關(guān)聯(lián)的對象,需要在主對象dealloc的時(shí)候釋放么邑狸?
無論在MRC下還是ARC下均不需要懈糯。
- objc中的類方法和實(shí)例方法有什么本質(zhì)區(qū)別和聯(lián)系?
- 類方法:
類方法是屬于類對象的
類方法只能通過類對象調(diào)用
類方法中的self是類對象
類方法可以調(diào)用其他的類方法
類方法中不能訪問成員變量
類方法中不能直接調(diào)用對象方法- 實(shí)例方法:
實(shí)例方法是屬于實(shí)例對象的
實(shí)例方法只能通過實(shí)例對象調(diào)用
實(shí)例方法中的self是實(shí)例對象
實(shí)例方法中可以訪問成員變量
實(shí)例方法中直接調(diào)用實(shí)例方法
實(shí)例方法中也可以調(diào)用類方法(通過類名)
以上答案在《招聘一個(gè)靠譜的 iOS》—參考答案(上)
下面答案在《招聘一個(gè)靠譜的 iOS》—參考答案(下)
_objc_msgForward函數(shù)是做什么的单雾,直接調(diào)用它將會(huì)發(fā)生什么赚哗?
runtime如何實(shí)現(xiàn)weak變量的自動(dòng)置nil?
能否向編譯后得到的類中增加實(shí)例變量硅堆?能否向運(yùn)行時(shí)創(chuàng)建的類中添加實(shí)例變量屿储?為什么?
runloop和線程有什么關(guān)系渐逃?
runloop的mode作用是什么够掠?
以+ scheduledTimerWithTimeInterval...的方式觸發(fā)的timer,在滑動(dòng)頁面上的列表時(shí)茄菊,timer會(huì)暫定回調(diào)疯潭,為什么?如何解決买羞?
猜想runloop內(nèi)部是如何實(shí)現(xiàn)的袁勺?
objc使用什么機(jī)制管理對象內(nèi)存?
ARC通過什么方式幫助開發(fā)者管理內(nèi)存畜普?
不手動(dòng)指定autoreleasepool的前提下期丰,一個(gè)autorealese對象在什么時(shí)刻釋放?(比如在一個(gè)vc的viewDidLoad中創(chuàng)建)
BAD_ACCESS在什么情況下出現(xiàn)吃挑?
蘋果是如何實(shí)現(xiàn)autoreleasepool的钝荡?
使用block時(shí)什么情況會(huì)發(fā)生引用循環(huán),如何解決舶衬?
在block內(nèi)如何修改block外部變量埠通?
使用系統(tǒng)的某些block api(如UIView的block版本寫動(dòng)畫時(shí)),是否也考慮引用循環(huán)問題逛犹?
GCD的隊(duì)列(dispatch_queue_t)分哪兩種類型端辱?
串行隊(duì)列、并發(fā)隊(duì)列
如何用GCD同步若干個(gè)異步調(diào)用虽画?(如根據(jù)若干個(gè)url異步加載多張圖片舞蔽,然后在都下載完成后合成一張整圖)
dispatch_barrier_async的作用是什么?
蘋果為什么要廢棄dispatch_get_current_queue码撰?
dispatch_get_current_queue容易造成死鎖渗柿。
- 什么是arc?(arc是為了解決什么問題誕生的脖岛?)
ARC是Auto Reference Counting的縮寫朵栖,即自動(dòng)引用計(jì)數(shù)颊亮,由編譯器在代碼合適的位置中自動(dòng)添加retain/Release/Autorelease/dealloc方法從而進(jìn)行內(nèi)存管理.
ARC幾個(gè)要點(diǎn):
在對象被創(chuàng)建時(shí) retain count +1,在對象被release時(shí) retain count -1.當(dāng)retain count 為0 時(shí)陨溅,銷毀對象终惑。
程序中加入autoreleasepool的對象會(huì)由系統(tǒng)自動(dòng)加上autorelease方法,如果該對象引用計(jì)數(shù)為0声登,則銷毀狠鸳。
那么ARC是為了解決什么問題誕生的呢?這個(gè)得追溯到MRC手動(dòng)內(nèi)存管理時(shí)代說起悯嗓。
MRC下內(nèi)存管理的缺點(diǎn):
當(dāng)我們要釋放一個(gè)堆內(nèi)存時(shí)件舵,首先要確定指向這個(gè)堆空間的指針都被release了。(避免提前釋放)
釋放指針指向的堆空間脯厨,首先要確定哪些指針指向同一個(gè)堆铅祸,這些指針只能釋放一次。(MRC下即誰創(chuàng)建合武,誰釋放临梗,避免重復(fù)釋放)
模塊化操作時(shí),對象可能被多個(gè)模塊創(chuàng)建和使用稼跳,不能確定最后由誰去釋放盟庞。
多線程操作時(shí),不確定哪個(gè)線程最后使用完畢
- 請解釋以下keywords的區(qū)別: assign vs weak, __block vs __weak
__block 說明符就為 block 提供了變量的修改權(quán).
后者是 所有權(quán)修飾符 , 什么是所有權(quán)修飾符? 這里涉及到另一個(gè)問題, 因?yàn)樵?ARC 有效時(shí), id 類型和對象類型同 C 語言中的其他類型不同, 必須附加所有權(quán)修飾符. 所有權(quán)修飾符一種有 4 種:
__strong
__weak
__unsafe_unretained
__autorelease
__weak 與 weak 的區(qū)別只在于, 前者用于變量的聲明, 而后者用于屬性的聲明.
__block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:
1.__block不管是ARC還是MRC模式下都可以使用汤善,可以修飾對象什猖,還可以修飾基本數(shù)據(jù)類型。
2.__weak只能在ARC模式下使用红淡,也只能修飾對象(NSString)不狮,不能修飾基本數(shù)據(jù)類型(int)。
3.__block對象可以在block中被重新賦值在旱,__weak不可以摇零。
也就是說,在MRC下桶蝎,我們通常使用__block,而在ARC下我們通常使用__weak,或者_(dá)_unsafe_unretained __block(不安全驻仅,不建議使用)來修飾防止循環(huán)引用而造成的內(nèi)存泄露。
- __block在arc和非arc下含義一樣嗎登渣?
- 非arc下 __block修飾的變量的引用計(jì)算是不變的
- arc iOS5之后用__weak iOS雾家, 5之前可以用__unsafe_unretained
- arc下__block 使block可以訪問并修改外部變量
- 使用atomic一定是線程安全的嗎?
atomic:原子屬性绍豁,為setter方法加鎖(默認(rèn)就是atomic)
nonatomic:非原子屬性,不會(huì)加鎖
atomic:線程安全牙捉,需要消耗大量的資源
nonatomic:非線程安全竹揍,適合內(nèi)存小的移動(dòng)設(shè)備
描述一個(gè)你遇到過的retain cycle例子敬飒。(別撒謊,你肯定遇到過)
+(void)load; +(void)initialize芬位;有什么用處无拗?
load:類初始化加載時(shí)調(diào)用,調(diào)用順序是父類優(yōu)于子類昧碉,子類優(yōu)于分類
initialize:第一次調(diào)用類的類方法或?qū)嵗椒ㄖ罢{(diào)用
這兩個(gè)方法只有實(shí)現(xiàn)了才會(huì)被調(diào)用
- 為什么其他語言里叫函數(shù)調(diào)用英染, objective c里則是給對象發(fā)消息(或者談下對runtime的理解)
在java中,類和方法在編譯期就綁定在一起
在OC中被饿,方法調(diào)用是向類發(fā)送消息,如(bady cry)在運(yùn)行時(shí)會(huì)轉(zhuǎn)換成objc_msgSend(bady,cry),向?qū)ο蟀l(fā)送消息時(shí)根據(jù)isa指針找到類四康,在根據(jù)類的調(diào)度表查找方法,沒找到方法則在父類中查找直至基類狭握,如果始終沒有找到返回nil
Objective-C 的 Runtime 鑄就了它動(dòng)態(tài)語言的特性闪金,這些深層次的知識(shí)雖然平時(shí)寫代碼用的少一些,但是卻是每個(gè) Objc 程序員需要了解的论颅。Objc Runtime使得C具有了面向?qū)ο竽芰Πタ眩诔绦蜻\(yùn)行時(shí)創(chuàng)建,檢查恃疯,修改類漏设、對象和它們的方法〗裢可以使用runtime的一系列方法實(shí)現(xiàn)郑口。
什么是method swizzling?
UIView和CALayer是啥關(guān)系?
- 首先UIView可以響應(yīng)事件蛙奖,Layer不可以.
UIApplication潘酗、UIViewController、UIView雁仲、和所有從UIView派生出來的UIKit類(包括UIWindow)都直接或間接地繼承自UIResponder類仔夺。
CALayer直接繼承 NSObject,并沒有相應(yīng)的處理事件的接口攒砖。- UIView是CALayer的delegate
- UIView主要處理事件缸兔,CALayer負(fù)責(zé)繪制就更好
- 每個(gè) UIView 內(nèi)部都有一個(gè) CALayer 在背后提供內(nèi)容的繪制和顯示,并且 UIView 的尺寸樣式都由內(nèi)部的 Layer 所提供吹艇。兩者都有樹狀層級(jí)結(jié)構(gòu)惰蜜,layer 內(nèi)部有 SubLayers,View 內(nèi)部有 SubViews.但是 Layer 比 View 多了個(gè)AnchorPoint
如何高性能的給UIImageView加個(gè)圓角受神?(不準(zhǔn)說layer.cornerRadius!)
使用drawRect有什么影響抛猖?(這個(gè)可深可淺,你至少得用過。财著。)
ASIHttpRequest或者SDWebImage里面給UIImageView加載圖片的邏輯是什么樣的联四?(把UIImageView放到UITableViewCell里面問更贊)
麻煩你設(shè)計(jì)個(gè)簡單的圖片內(nèi)存緩存器(移除策略是一定要說的)
講講你用Instrument優(yōu)化動(dòng)畫性能的經(jīng)歷吧(別問我什么是Instrument)
loadView是干嘛用的?
loadview在view為nil時(shí)調(diào)用撑教,早于ViewDidLoad
當(dāng)用到nib文件時(shí)朝墩,加載nib文件
沒有用到,默認(rèn)創(chuàng)建一個(gè)空view伟姐,可以自定義一個(gè)view賦值給self.view,不必調(diào)用super
viewWillLayoutSubView你總是知道的收苏。
鏈接GCD里面有哪幾種Queue?你自己建立過串行queue嗎愤兵?背后的線程模型是什么樣的鹿霸?
用過coredata或者sqlite嗎?讀寫是分線程的嗎恐似?遇到過死鎖沒杜跷?咋解決的?
http的post和get啥區(qū)別矫夷?(區(qū)別挺多的葛闷,麻煩多說點(diǎn))
我知道你大學(xué)畢業(yè)過后就沒接觸過算法數(shù)據(jù)結(jié)構(gòu)了,但是請你一定告訴我什么是Binary search tree? search的時(shí)間復(fù)雜度是多少双藕?我很想知道淑趾!
產(chǎn)品設(shè)計(jì)方面問題
iOS應(yīng)用圖標(biāo)是指什么?請盡可能詳細(xì)地描述一下忧陪。
最小尺寸和最大尺寸的應(yīng)用圖標(biāo)分別是什么樣子的扣泊?
應(yīng)用圖標(biāo)能否包含透明的部分?
Newsstand的圖標(biāo)與常規(guī)應(yīng)用有何不同嘶摊?
請解釋一下啟動(dòng)畫面(Launch Images)延蟹。
自動(dòng)布局(Auto Layout)的作用是什么?請概括一下它是如何* 運(yùn)行的叶堆。
設(shè)計(jì)軟件時(shí)為什么要加上動(dòng)畫阱飘?
請描述一下軟件設(shè)計(jì)中的交互和Feedback有什么作用。
設(shè)計(jì)iPhone和iPad應(yīng)用時(shí)虱颗,應(yīng)分別考慮哪些因素沥匈?
請描述一下原型設(shè)計(jì)對于軟件開發(fā)的意義。其作用是什么忘渔?
關(guān)于App Store
應(yīng)用內(nèi)購買(In-App Purchases)是怎么回事高帖?IAP能夠?yàn)橛脩魩砟男┬麦w驗(yàn)?
你是否在App Store上發(fā)布過應(yīng)用畦粮?能否概括一下過程散址?
iTunes Connect是什么乖阵?
Provisioning Profiles是指?
App ID是什么爪飘?
iOS的開發(fā)和發(fā)布簽名證書有何異同义起?
如何使用TestFlight?通過Ad-hoc發(fā)布應(yīng)用的話师崎,該如何使用UUID?
應(yīng)何時(shí)驗(yàn)證購買收據(jù)椅棺?
*發(fā)布iAds(蘋果平臺(tái)廣告)有哪些要求犁罩?
面經(jīng)分享
鏈接:[iOS]關(guān)于面試,做一次整理吧(包含BAT面試題目)
高頻率重點(diǎn)問題:
1.說說 UITableView 的調(diào)優(yōu)两疚。
一方面是通過 instruments 檢查影響性能的地方床估,另一方面是估
算高度并在 runloop 空閑時(shí)緩存。
- 談?wù)勀銓?ARC 的理解诱渤。
ARC 是編譯器完成的丐巫,依靠引用計(jì)數(shù),談?wù)剮讉€(gè)屬性修飾符的內(nèi)存管理策略勺美,什么情況下會(huì)內(nèi)存泄露递胧。
3.MVC 具有什么樣的優(yōu)勢,各個(gè)模塊之間怎么通信赡茸,比如點(diǎn)擊 Button 后 怎么通知 Model缎脾?
4.KVO、Notification占卧、delegate 各自的優(yōu)缺點(diǎn)遗菠,效率還有使用場景
- 當(dāng)接收者不需要關(guān)注發(fā)送者,只關(guān)注此消息华蜒,并且消息傳遞是單向時(shí),使用Notifications
- block是iOS4加入的辙纬,
5.如何手動(dòng)通知 KVO
6.runtime 中,SEL 和 IMP 的區(qū)別
7.autoreleasepool 的使用場景和原理
8.RunLoop 的實(shí)現(xiàn)原理和數(shù)據(jù)結(jié)構(gòu)叭喜,什么時(shí)候會(huì)用到
9.使用 GCD 如何實(shí)現(xiàn)這個(gè)需求:A贺拣、B、C 三個(gè)任務(wù)并發(fā)域滥,完成后執(zhí)行任務(wù) D纵柿。
10.如何設(shè)計(jì)圖片緩存?
11.說說你對 OC 中 load 方法和 initialize 方法的異同启绰“喝澹——主要說一下執(zhí)行時(shí)間,各自用途委可,沒實(shí)現(xiàn)子類的方法會(huì)不會(huì)調(diào)用父類的渊跋?
12.說說你對 block 的理解腊嗡。—— 三種 block拾酝,棧上的自動(dòng)復(fù)制到堆上燕少,block 的屬性修飾符是 copy,循環(huán)引用的原理和解決方案蒿囤。
- 編譯器會(huì)根據(jù)block捕獲的變量客们,生成具體的結(jié)構(gòu)體定義。block內(nèi)部的代碼提取成一個(gè)單獨(dú)的C函數(shù)材诽。
創(chuàng)建block時(shí)底挫,實(shí)際就是在方法中聲明一個(gè)結(jié)構(gòu)體(struct),并且初始化該struct的成員脸侥,執(zhí)行block時(shí)建邓,就是調(diào)用單獨(dú)的C函數(shù),并把struct指針傳遞過去睁枕。- block中包含了被引用的自由變量(由struct持有)官边,也包含了控制成分的代碼塊(由函數(shù)指針持有),符合閉包(closure)的概念外遇。
- block中的isa指向的是該block的Class
_NSConcreteStackBlock 棧上創(chuàng)建的block
_NSConcreteMallocBlock 堆上創(chuàng)建的block
_NSConcreteGlobalBlock 作為全局變量的block
1.怎么判斷某個(gè) cell 是否顯示在屏幕上
2.TCP 流量控制
3.數(shù)組和鏈表的區(qū)別
4.UIView 生命周期
5.如果頁面 A 跳轉(zhuǎn)到 頁面 B注簿,A 的 viewDidDisappear 方法和 B 的 viewDidAppear 方法哪個(gè)先調(diào)用?
6.ARC 的本質(zhì)
ARC是iOS5推出的
7.RunLoop 的基本概念臀规,它是怎么休眠的滩援?
8.如何找到字符串中第一個(gè)不重復(fù)的字符
9.哈希表如何處理沖突
騰訊
如何繪制一個(gè)三角形?
1.1 如何繪制大量三角形塔嬉?
1.2 一定要重寫drawRect嗎玩徊?
1.3 如何刷新View界面?
1.4 Layer好在哪谨究?
assign和weak的區(qū)別
線程和RunLoop的關(guān)系
3.1 一個(gè)autorealese對象在什么時(shí)刻釋放恩袱?(比如在一個(gè)vc的viewDidLoad中創(chuàng)建)
NSTimer有什么需注意的以及和RunLoop的關(guān)系?
NSString copy 和 NSString mutableCopy 的區(qū)別
線程加鎖原理(信號(hào)量胶哲,臨界區(qū)畔塔,自選鎖)
iOS7 - iOS9的區(qū)別
GCD指向了野指針了怎么辦
用HTTP傳數(shù)據(jù),丟包嚴(yán)重怎么辦
iOS中廣播的種類
app slying
runtime如何實(shí)現(xiàn)weak變量的自動(dòng)置nil鸯屿?
AFNetworking的內(nèi)部實(shí)現(xiàn)原理澈吨?
block循環(huán)引用了如何解決?
如何用GCD同步若干個(gè)異步調(diào)用寄摆?(如根據(jù)若干個(gè)url異步加載多張圖片谅辣,然后在都下載完成后合成一張整圖)
UIKit的框架結(jié)構(gòu)?