iOS. 面試題(一)

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的代理

  • 2.代理對象遵照協議
  • 3.實現協議裏面
- (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當中

相關文章
相關標籤/搜索