-
tabBar
UITabBarController
的 super init
里面會(huì)調(diào) self.view
所以繼承時(shí) 只锻,viewDidLoad
會(huì)比我們自己的 init
先調(diào)
平時(shí)寫(xiě) viewDidLoad
直接搞到 init
去
-
類(lèi)型
在Swift里面AnyObject?
必須是類(lèi)晰洒,如果需要傳入protocol
類(lèi)型的參數(shù)重荠,可以換成Any?
-
相機(jī)
AVCaptureSession
自定義相機(jī)界面
-
直播的第三方庫(kù)
https://github.com/ltebean/Live
-
%.xf 顯示小數(shù)點(diǎn)后x位
-
下面代碼中為什么可以直接用self挎峦?
[UIView animateWithDuration:1 animations:^{ self.view.backgroundColor = [UIColor yellowColor]; }];
答:當(dāng) block 本身不被 self 持有阻逮,而被別的對(duì)象持有钻哩,同時(shí)不產(chǎn)生循環(huán)引用的時(shí)候,就不需要使用 weak self 了碟渺。最常見(jiàn)的代碼就是 UIView 的動(dòng)畫(huà)代碼鲜锚,我們?cè)谑褂?UIView 的
animateWithDuration:animations
方法 做動(dòng)畫(huà)的時(shí)候,并不需要使用 weak self苫拍,因?yàn)橐贸钟嘘P(guān)系是:
UIView 的某個(gè)負(fù)責(zé)動(dòng)畫(huà)的對(duì)象持有了 block
block 持有了 self
因?yàn)?self 并不持有 block芜繁,所以就沒(méi)有循環(huán)引用產(chǎn)生,因?yàn)榫筒恍枰褂?weak self 了怯疤。
[UIView animateWithDuration:0.2 animations:^{
self.alpha = 1;
}];
當(dāng)動(dòng)畫(huà)結(jié)束時(shí)浆洗,UIView 會(huì)結(jié)束持有這個(gè) block催束,如果沒(méi)有別的對(duì)象持有 block 的話(huà)集峦,block 對(duì)象就會(huì)釋放掉,從而 block 會(huì)釋放掉對(duì)于 self 的持有抠刺。整個(gè)內(nèi)存引用關(guān)系被解除塔淤。
-
當(dāng)一個(gè)View的bounds原點(diǎn)不為0的時(shí)候會(huì)出現(xiàn)什么情況?
- 它可以修改自己坐標(biāo)系的原點(diǎn)位置速妖,影響“子view”的顯示位置高蜂。
- bounds,它可以通過(guò)改變寬高罕容,改變自身的frame备恤,進(jìn)而影響到再父視圖的顯示位置和大小。
詳細(xì)解釋
-
什么時(shí)候用NS_OPTIONS锦秒,NS_ENUM?
NS_ENUM定義通用枚舉露泊,NS_OPTIONS定義位移枚舉
位移枚舉即是在你需要的地方可以同時(shí)存在多個(gè)枚舉值如這樣:
UISwipeGestureRecognizer *swipeGR = [[UISwipeGestureRecognizer alloc] init];
swipeGR.direction = UISwipeGestureRecognizerDirectionDown | UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight;
//這里幾個(gè)枚舉項(xiàng)同時(shí)存在表示它的方向同時(shí)包含1.向下2.向左3.向右
而NS_ENUM定義的枚舉不能幾個(gè)枚舉項(xiàng)同時(shí)存在,只能選擇其中一項(xiàng)旅择,像這樣:
NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
paragraph.baseWritingDirection = NSWritingDirectionNatural;
-
漸進(jìn)式圖片加載
當(dāng)圖片從網(wǎng)絡(luò)中獲取的時(shí)候惭笑,可能由于過(guò)大,數(shù)據(jù)緩慢,這時(shí)候就需要漸進(jìn)式加載圖片來(lái)顯示沉噩。主要通過(guò)CFData對(duì)象來(lái)實(shí)現(xiàn):
創(chuàng)建一個(gè)CFData去添加image data.
創(chuàng)建一個(gè)漸進(jìn)式圖片資源捺宗,通過(guò) CGImageSourceCreateIncremental
獲取圖片數(shù)據(jù)到CFData中
調(diào)用CGImageSourceUpdateData函數(shù),傳遞CFData和一個(gè)bool值川蒙,去描述這個(gè)數(shù)據(jù)是否包含全部圖片數(shù)據(jù)或者只是部分?jǐn)?shù)據(jù)蚜厉。無(wú)論什么情況,這個(gè)data包含已經(jīng)積累的全部圖片文件畜眨。
如果已經(jīng)有足夠的圖片數(shù)據(jù)弯囊,可以通過(guò)函數(shù)繪制CGImageSourceCreateImageAtIndex部分圖片,然后記得要Release掉它胶果。
檢查是否已經(jīng)有全部的圖片數(shù)據(jù)通過(guò)使用CGImageSourceGetStatusAtIndex函數(shù)匾嘱。如果圖片是完整的,函數(shù)返回值為kCGImageStatusComplete早抠。否則繼續(xù)3霎烙,4步驟,直到獲得全部數(shù)據(jù)蕊连。
Release掉漸進(jìn)式增長(zhǎng)的image source悬垃。
-
__weak 和 __block 區(qū)別
__weak
本身是可以避免循環(huán)引用的問(wèn)題的,但是其會(huì)導(dǎo)致外部對(duì)象釋放了之后甘苍,block 內(nèi)部也訪問(wèn)不到這個(gè)對(duì)象的問(wèn)題尝蠕,我們可以通過(guò)在 block 內(nèi)部聲明一個(gè)__strong
的變量來(lái)指向 weakObj,使外部對(duì)象既能在 block 內(nèi)部保持住载庭,又能避免循環(huán)引用的問(wèn)題看彼。
__block
本身無(wú)法避免循環(huán)引用的問(wèn)題,但是我們可以通過(guò)在 block 內(nèi)部手動(dòng)把 blockObj 賦值為 nil 的方式來(lái)避免循環(huán)引用的問(wèn)題囚聚。另外一點(diǎn)就是__block
修飾的變量在 block 內(nèi)外都是唯一的靖榕,要注意這個(gè)特性可能帶來(lái)的隱患。
詳細(xì)解釋
-
swift工程編譯越來(lái)越慢
swift工程編譯越來(lái)越慢顽铸,原來(lái)...
Build Time Analyzer for Swift
-
OC禪道
https://www.gitbook.com/book/yourtion/objc-zen-book-cn
優(yōu)化UITableViewCell高度計(jì)算的那些事
-
BASE64 詳解
-
解決double精度缺失的問(wèn)題
https://juejin.im/post/5949edd68d6d8109de26c6bb?utm_source=gold_browser_extension