給button加圓角的方式
1.cornerRadius五督。
2.使用貝塞爾曲線畫圓角
貝塞爾和Core Graphics畫圓角:用貝塞爾曲線畫出一個圓形圖彰导,然后將button的image設(shè)置為該圖浊闪;
3.使用CAShapeLayer和貝塞爾設(shè)置圓角:alloc一個CAshapeLayer,用貝塞爾畫出圓形path賦值給layer螺戳,將button的layer.mask屬性設(shè)置為layer;
CALayer和UIVIew
1 :首先呢CAlayer 是直接繼承自NSObjec的折汞,而UIview倔幼、UIVC、UIkit類中的爽待、UIAppliation都是繼承自UIResponder损同,在其中定義了各種事件處理的接口;
2:一個 Layer 的 frame 是由它的 anchorPoint,position,bounds,和 transform 共同決定的鸟款,而一個 View 的 frame 只是簡單的返回 Layer的 frame膏燃,同樣 View 的 center和 bounds 也是返回 Layer 的一些屬性
3:UIView是CALayer的Delegate,它偏向于管理顯示內(nèi)容何什,而layer偏向于繪制內(nèi)容组哩;
4:修改非rootLayer會產(chǎn)生隱式動畫;
Button圓角的觸控區(qū)域
擴展觸控區(qū)域要用到Runtime处渣,因為Category不能添加屬性伶贰,這時候就需要動態(tài)的為其添加擴展距離的屬性,然后用Associative Object關(guān)聯(lián)對象罐栈,動態(tài)的添加擴展距離屬性黍衙;
1. static char topNameKey; //設(shè)置屬性。擴展的大熊堋琅翻;
2. (void) setEnlargeEdgeWithTop:(CGFloat) top right:(CGFloat) right bottom:(CGFloat) bottom left:(CGFloat) left //設(shè)置關(guān)聯(lián)屬性
3. {
4. objc_setAssociatedObject(self, &topNameKey, [NSNumber numberWithFloat:top], OBJC_ASSOCIATION_COPY_NONATOMIC);
1. ?
2. 擴展大小柑贞;
3. (CGRect) enlargedRect
4. {
5. NSNumber* topEdge = objc_getAssociatedObject(self, &topNameKey);
6. NSNumber* rightEdge = objc_getAssociatedObject(self, &rightNameKey);
7. NSNumber* bottomEdge = objc_getAssociatedObject(self, &bottomNameKey);
8. NSNumber* leftEdge = objc_getAssociatedObject(self, &leftNameKey);
9. if (topEdge && rightEdge && bottomEdge && leftEdge)
10. {
11. return CGRectMake(self.bounds.origin.x - leftEdge.floatValue,
12. self.bounds.origin.y - topEdge.floatValue,
13. self.bounds.size.width + leftEdge.floatValue + rightEdge.floatValue,
14. self.bounds.size.height + topEdge.floatValue + bottomEdge.floatValue);
15. }
16. else
17. {
18. return self.bounds;
19. }
20. }
重寫HitTest
1. - (UIView*) hitTest:(CGPoint) point withEvent:(UIEvent*) event
2. {
3. CGRect rect = [self enlargedRect];
4. if (CGRectEqualToRect(rect, self.bounds))
5. {
6. return [super hitTest:point withEvent:event];
7. }
8. return CGRectContainsPoint(rect, point) ? self : nil;
9. }
hittest
IOS響應(yīng)鏈方椎,點擊事件和手勢哪個先觸發(fā)
如果hit-test view或first responder不處理此事件,則將事件傳遞給其nextResponder處理凌外,若有UIViewController對象則傳遞給UIViewController辩尊,傳遞給其superView。
如果view的viewController也不處理事件康辑,則viewController將事件傳遞給其管理view的superView摄欲。
視圖層級結(jié)構(gòu)的頂級為UIWindow對象轿亮,如果window仍不處理此事件,傳遞給UIApplication.
若UIApplication對象不處理此事件胸墙,則事件被丟棄我注。
巧妙使用Responder:
根據(jù)一個view對象,沒有直接的方法可以得到管理它的viewController,但我們使用responder chain可以間接的得到,代碼如下:
@implementation UIView (ParentController)
-(UIViewController*)parentController{
UIResponder *responder = [self nextResponder];
while (responder) {
if ([responder isKindOfClass:[UIViewController class]]) {
return (UIViewController*)responder;
}
responder = [responder nextResponder];
}
return nil;
}
@end
https://blog.csdn.net/chun799/article/details/8223612
GCD迟隅,dispatch_once的作用(線程安全)
http://www.reibang.com/p/2d57c72016c6
iOS死鎖的觸發(fā)條件
雙向阻塞會發(fā)生死鎖但骨;
比如我用GCD創(chuàng)建一個Sync同步的主線程任務(wù),這個任務(wù)是一個閉包智袭,此時就會等待閉包執(zhí)行完畢奔缠,而此時主線程又是阻塞狀態(tài),造成了雙向的阻塞吼野;
循環(huán)引用
http://www.reibang.com/p/ddfd1b3c0298
HTTP和HTTPS
HTTPS和HTTP的區(qū)別主要如下:
1校哎、https協(xié)議需要到ca申請證書,一般免費證書較少瞳步,因而需要一定費用闷哆。
2、http是超文本傳輸協(xié)議单起,信息是明文傳輸抱怔,https則是具有安全性的ssl加密傳輸協(xié)議。
3嘀倒、http和https使用的是完全不同的連接方式屈留,用的端口也不一樣,前者是80测蘑,后者是443绕沈。
4、http的連接很簡單帮寻,是無狀態(tài)的乍狐;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議固逗,比http協(xié)議安全浅蚪。
鏈接:https://www.jianshu.com/p/6db0c6dc97a9
SSL證書,CA證書
https://www.cnblogs.com/handsomeBoys/p/6556336.html
Socket
可選類型的實現(xiàn)
(some烫罩、none)EMUM枚舉
TCP和UDP
Tcp/IP惜傲。慢啟動
https://blog.csdn.net/jtracydy/article/details/52366461
進程通信方式
消息傳遞(管道、FIFO贝攒、消息隊列)
同步(互斥量盗誊、條件變量、讀寫鎖、文件和寫記錄鎖哈踱、信號量)
共享內(nèi)存(匿名的和具名的)
遠程過程調(diào)用(Solaris門和Sun RPC)
1.管道(pipe)
管道是一種具有兩個端點的通信通道荒适,一個管道實際上就是只存在在內(nèi)存中的文件,對這個文件操作需要兩個已經(jīng)打開文件進行开镣,他們代表管道的兩端刀诬,也叫兩個句檳,管道是一種特殊的文件邪财,不屬于一種文件系統(tǒng)陕壹,而是一種獨立的文件系統(tǒng),有自己的數(shù)據(jù)結(jié)構(gòu)树埠,根據(jù)管道的使用范圍劃分為無名管道和命名管道糠馆。
無名管道用于父進程和子進程之間,通常父進程創(chuàng)建管道怎憋,然后由通信的子進程繼承父進程的讀端點句柄和寫端點句柄漱牵,或者父進程有讀寫句柄的子進程晴股,這些子進程可以使用管道直接通信犬庇,不需要通過父進程悲伶。
命名管道熊杨,命名管道是為了解決無名管道只能在父子進程間通信而設(shè)計的孔轴,命名管道是建立在實際的磁盤介質(zhì)或文件系統(tǒng)(而不是只存在內(nèi)存中)筋现,任何進程可以通過文件名或路徑建立與該文件的聯(lián)系矾睦,命名換到需要一種FIFO文件(有先進先出的原則)掉奄,雖然FIFO文件的inode節(jié)點在磁盤上规个,但僅是一個節(jié)點而已,文件的數(shù)據(jù)還是存在于內(nèi)存緩沖頁面中姓建,和普通管道相同诞仓。
2.信號
信號,用于接受某種事件發(fā)生速兔,除了用于進程間通信之外墅拭,進程還可以發(fā)送信號給進程本身。除了系統(tǒng)內(nèi)核和root之外涣狗,只有具備相同id的進程才可以信號進行通信谍婉。
3.消息隊列
消息隊列是消息的鏈表,包括Posix消息隊列和system v消息隊列(Posix常用于線程镀钓,system常用于進程)穗熬,有權(quán)限的進程可以向消息隊列中添加消息,有讀權(quán)限的進程可以讀走消息隊列的消息丁溅。
消息隊列克服了信號承載信息量少唤蔗,管道只能承載無格式字節(jié)流及緩沖區(qū)大小受限等缺陷。
4.共享內(nèi)存
共享內(nèi)存使多個進程可以訪問同一塊內(nèi)存空間,是最快的IPC形式妓柜,是針對其他通信方式運行效率低而設(shè)計的箱季,往往與其他進程結(jié)合使用,如與信號量結(jié)合领虹,來達到進程間的同步與互斥规哪。傳遞文件最好用共享內(nèi)存的方式。
進程線程區(qū)別
https://blog.csdn.net/yanxiaolx/article/details/51763372
進程是cpu資源分配的最小單位塌衰,線程是cpu調(diào)度的最小單位诉稍。
Swift重載運算符
OC和C++實現(xiàn)類的方式
OC和C++的區(qū)別
一個應(yīng)用問題,怎么設(shè)計完成一個網(wǎng)盤系統(tǒng)(圖的遍歷計算總大小最疆、多線程下載)
控制同時下載的文件的個數(shù)(控制并發(fā)數(shù)目)
算法題:二維數(shù)組螺旋輸出
美團三面:
你在上兩面哪里表現(xiàn)的好杯巨,哪里不好?
大學(xué)中你覺得最難的一門課是什么努酸,怎么去克服的服爷?
團隊中出現(xiàn)矛盾怎么解決
怎么協(xié)調(diào)與團隊成員的關(guān)系
對你影響最大的一個項目
你對美團的技術(shù)團隊有了解么(。获诈。之前不小心看到了美團技術(shù)團隊的博客然后巴拉巴拉扯了一下)
你對美團公司的了解呢
你平時是怎么學(xué)習(xí)的
CPU知道線程和進程么仍源?
CPU怎么調(diào)度進程的
阻塞IO/非阻塞IO。舔涎。笼踩。
用戶態(tài)和內(nèi)核態(tài)
MVVM的特點和好處
IOS進程鎖機制
進程通信的方式
IOS代碼規(guī)范
IOS代碼風(fēng)格
Swift什么優(yōu)點
動態(tài)語言和靜態(tài)語言
弱類型和強類型語言
網(wǎng)絡(luò)請求數(shù)據(jù)交換格式了解多少
代碼自動化的問題
又一個2048游戲,寫一下他的需求文檔亡嫌,你會怎么寫
你有什么想問的(我問了我們美團上海的主要是做什么的)