1、擴展與分類的區別緩存
一、擴展沒有名字,分類有名字性能優化
二、擴展能夠添加私有變量和私有方法;分類能夠在不改變原有類的基礎上,爲類添加方法,通常用於爲系統類添加方法,不能添加成員變量,若是必定要添加成員變量,能夠經過runtime動態添加網絡
三、擴展中添加的方法必須實現,分類添加的方法能夠不實現框架
2、簡要的說明 UIView 的 frame 和 bounds 的區別異步
一、frame是view在父試圖中的位置和尺寸,它以父試圖左上角爲座標原點性能
二、bounds是基於自身的位置和尺寸,以本身的左上角爲座標原點優化
3、什麼是控制器動畫
一、凡是繼承自UIViewController的都是控制器ui
4、簡單的描述控制器的做用spa
一、處理軟件界面的各類事情,並負責軟件界面的建立和銷燬
5、簡單的描述下 Storyboard 的做用
一、用來描述軟件界面的
6、簡單描述父子控件
每一個控件都是一個容器,能容納小控件,內部小控件是大控件的子控件,大控件是內部小控件的父控件
7、IBOutLet 有什麼做用 ?
一、- 被 IBOutlet 修飾的屬性能拖線到 Storyboard或xib 中,並且只能修飾屬性。
8、IBAction 有什麼做用 ?
一、 被 IBAction 修飾的方法能拖線到 Storyboard 或xib中,只能修飾方法返回值類型。
9、 解釋下引用資源的時候每一個選項的含義 -
一、copy:勾選 copy,會把資源拷貝一份到項目的文件夾中(建議勾選,由於這樣修改項目中的資源不會影響源資源)。
二、- Added folder:若是勾選 Create groups,只會會建立一個虛擬的文件夾,程序打包後,安裝包中不存在這個文件夾;若是勾選 Create folder references,真的建立一個文件夾,程序打包後,安裝包中真的有這個文件夾。
三、Add to targets:要不要把資源打包到軟件安裝包中去.必定要勾選,不勾選到時候程序打包後,安裝包中沒有這個資源。
10、UILabel如何設置自動換行
一、label.numberOfLines = 0;
11、.Character Wrap和Word Wrap的區別
一、character wrap 以字符分割
二、word wrap以單詞分割
三、用於label換行是,是以字符換行,仍是以單詞換行
12、contentMode的做用
一、通常用來控制圖片如何顯示
二、contentMode是UIView的屬性
typedef NS_ENUM(NSInteger, UIViewContentMode) {
UIViewContentModeScaleToFill, //縮放圖片,使圖片充滿容器,屬性會致使圖片變形。
UIViewContentModeScaleAspectFit, // 會保證圖片比例不變,並且所有顯示在ImageView中,這意味着ImageView會有部分空白,不會填充整個區域。
UIViewContentModeScaleAspectFill, // 也會證圖片比例不變,可是是填充整個ImageView的,可能只有部分圖片顯示出來。
//下面的屬性都是不會拉伸圖片的
UIViewContentModeRedraw, // redraw on bounds change (calls -setNeedsDisplay)
UIViewContentModeCenter, // contents remain same size. positioned adjusted.
UIViewContentModeTop, //將圖片放在View中頂部的位置進行調整
UIViewContentModeBottom, //將圖片放在View中底部的位置進行調整
UIViewContentModeLeft, //將圖片放在View中左邊的位置進行調整
UIViewContentModeRight, //將圖片放在View中右邊的位置進行調整
UIViewContentModeTopLeft, //將圖片放在View中左上邊的位置進行調整
UIViewContentModeTopRight, //將圖片放在View中右上邊的位置進行調整
UIViewContentModeBottomLeft, //將圖片放在View中左下邊的位置進行調整
UIViewContentModeBottomRight, //將圖片放在View中右下邊的位置進行調整
};
由此能夠得出
枚舉最前面三個屬性是會拉伸(縮放)圖片的,其他的屬性是不會拉伸圖片.
同時能夠總結出兩點
1.凡是帶有scale單詞的屬性,圖片都會被拉伸.
2.凡是帶有Ascept單詞屬性,圖片會保持原來的寬高比,即圖片不會變形.
最後若是想讓圖片佔滿整個父容器,而且不變形,能夠採用一種折中的方式
self.leftImageView.contentMode =UIViewContentModeScaleAspectFill; //超出容器範圍的切除掉 self.leftImageView.clipsToBounds = YES;
十3、initWithImage:的做用?
一、經過initWithImage:建立imageview,imageview的尺寸默認等於傳入的圖片的尺寸
十4、如何修改一個控件的 frame 屬性
一、經過CGRectFrame修改
二、經過結構體賦值
三、利用臨時結構體變量;
十5、如何抽取方法
一、把相同的代碼抽取到一個方法中,把要變化的做爲參數
十6、經過imageNamed:這個方法加載圖片有什麼特色
一、圖片會產生緩存
二、使用場景:圖片較小、使用頻率較高
三、須要緩存的圖片儘可能放在Images.xcassets
十7、開發如何選擇 UILabel,UIImageView,UIButton
一、能用UILabel,UIImageView儘可能用UILabel,UIImageView
,須要和用戶交互用UIButton
十8、什麼是自定義控件
一、繼承自系統的控件寫一個本身的控件,目的是封裝控件內部的細節
十9、經過代碼如何自定義控件
一、新建一個繼承 UIView 的類,(所謂自定義控件就是繼承系統自帶的控件寫一個本身的控件)
二、、在initwithframe方法中添加子控件,(保證別人在外面不論是經過 init 仍是initWithFrame 建立都可以添加子控件,由於 init 方法內部會調用initWithFrame)
三、在layoutsubviews設置子控件的frame,由於執行initwightframe方法時,可能父控件尚未frame,因此計算不了子控件的位置和尺寸,而在layoutSubViews 方法,可以拿到當前控件的尺寸
四、提供一個模型屬性,重寫模型的set方法,保證在別人設置屬性的那一刻第一時間拿到數據,設置到子控件上
二10、什麼是模型
一、用來存儲數據的對象
二、繼承自nsobject,在.h文件中聲明一些用來存放數據的屬性
二11、instancetype 和 id 的區別
一、instancetype和id均可以表明任意類型
二、instancetype只能做爲返回值,id能夠做爲返回值也能夠做爲參數,也能夠定義變量
三、instancetype會進行類型檢測,id不會作類型檢測
二12、@property的使用策略
一、assign:'基本數據類型'、’枚舉‘、’結構體‘等非OC對象
二、weak:OC對象類型(好比NSArray、NSDate、NSNumber、模型類)
三、strong:OC對象類型(好比NSArray、NSDate、NSNumber、模型類)
四、一個對象只要被強引用,就不會銷燬
二十3、懶加載的好處
一、用到時才建立
二、只加載一次
二十4、若是是經過 xib 或者 Storyboard 建立控件,初始化的操做能夠在initWithFrame:方法中作嗎?
一、經過xib 或者 Storyboard 建立的控件,初始化時是不會調用initWithFrame方法,會執行initWithCoder方法,初始化完成後執行awakeFromNib方法,建議在wakeFromNib方法中初始化
二十5、經過 alloc/init 或者 alloc/initWithFrame 建立控件會不會主動加載xib?
經過 alloc/init 或者 alloc/initWithFrame 建立控件不會主動加載xib,即便xib名和控件的類名同樣
二十6、KVC 的做用
一、能夠修改私有變量
二、能夠取值
三、能夠修改屬性
二十7、.如何監聽 scrollView 中止滾動? - 1.設置scrollView的代理
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
二十8、定時器通常有什麼做用?以及如何使用定時器
一、能夠設置每隔一段時間執行一個事件
一、經過+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo; 建立
二、能夠建立一個自動執行任務的定時器
三、能夠經過- (void)invalidate中止定時器
二十9、UIScrollView 沒法滾動的緣由
一、userinterface = NO
二、scrollEnable = No
三、tableview的contentsize沒有設置,或者設置的比較小
三10、scrollEnable和 userInteractionEnable 的區別
一、scrollenable = no時,只是不能滾動,他事件依舊可以響應
二、userInteractionEnable = no,禁止任何交互事件
三11、如何監聽 UIScrollView 各類行爲 -
1.設置 scrollView的delegate(代理)爲控制器對象
2.控制器要遵照協議 UIScrollViewDelegate 協議
3.控制器要實現 UIScrollViewDelegate 協議裏面的方法
三12、代理的注意點 -
1.scrollView的代理能夠是任何類型的OC 對象
2.代理必定是weak
三十3、經過約束如何實現動畫
- 在修改了約束以後,只要執行下面代碼,就能作動畫效果
[UIView animateWithDuration:1.0 animations:^{ [添加了約束的view的父控件 layoutIfNeeded]; }];
三十4、67.經過代碼自定義cell能在ininWithFrame:方法中添加子控件嗎? -
一、不能,自定義cell 是在initWithStyle:reuseIdentifier:方法添加子控件
三十5、設計框架應注意什麼
1
三十6、
tableView性能優化 -
1.tableView的緩存機制.
2.在不等高Cell當中,提早計算Cell的行高.提早估一個行高.200-250
3.若是說Cell當中有圓形圖片,圖片不要用ImageView加載layer.corneadius裁剪去作.會形成離屏渲染. 用繪圖Qurarzds裁剪,生成一張圓形的圖片.
4.若是說圖片的寬高,指定爲小數點.會形成鋸齒,形成鋸齒就會致使離屏渲染 -
5.cell當中的ImageView的大小最好是跟UIImage是同樣大,若是不同大 它會對UIImage作形變操做.cell當中展現都是小圖.小圖的大小跟ImageView 點擊放大,是再去用大的ImageView加載大圖.
6.作tableView的時候必定要用真機. -
7.若是是從網絡加載數據,必定要放到子線程(異步加載)當中作.
8.加載完畢的數據必定作本地緩存.
9.cell當中不要動態的添加子控件.通常都在建立時,就把要出現的Cell給添加進去,暫時不要顯示的,可隱藏.
10.儘可能減小Cell內部子控件的個數.
11.若是控件很是多,把不須要與用戶進行交互的控件.能過異步繪製出來.生成一張圖片.把圖片添加到cell當中