久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

iOS 面試大全從簡單到復雜(簡單篇)

 南山岳麓書院 2015-09-08

Part One 別人問你你都感覺這尼瑪說啥的基礎面試題

1.UIWindow和UIView和 CALayer 的聯(lián)系和區(qū)別?

答:UIView是視圖的基類,UIViewController是視圖控制器的基類,,UIResponder是表示一個可以在屏幕上響應觸摸事件的對象,;

UIwindow是UIView的子類,UIWindow的主要作用:一是提供一個區(qū)域來顯示UIView,,二是將事件(event)的分發(fā)給UIView,,一個應用基本上只有一個UIWindow.

萬物歸根,UIView和CALayer都是的老祖都是NSObjet,??梢?UIResponder是用來響應事件的,也就是UIView可以響應用戶事件,。

CALayer 和 UIView 的區(qū)別:
1.1 UIView的繼承結構為: UIResponder : NSObject,。
CALayer的繼承結構為: NSObject??梢?UIResponder是用來響應事件的,,也就是UIView可以響應用戶事件,CALayer直接從 NSObject繼承,,因為缺少了UIResponder類,,不能響應任何用戶事件
1.2 所屬框架,UIView是在 /System/Library/Frameworks/UIKit.framework中定義的,UIKit主要是用來構建用戶界面,并且是可以響應事件的,。CALayer是在/System/Library/Frameworks/QuartzCore.framework定義的,。而且CALayer作為一個低級的,可以承載繪制內容的底層對象出現(xiàn)在該框架中,。

1.3 UIView相比CALayer最大區(qū)別是UIView可以響應用戶事件,,而CALayer不可以,。UIView側重于對顯示內容的管理,CALayer側重于對內容的繪制,。UIView是基于CALayer的高層封裝,。

1.4 相似支持1:相似的樹形結構2:顯示內容繪制方式3: 布局約束
總結一下就是:UIView是用來顯示內容的,可以處理用戶事件.CALayer是用來繪制內容的,,對內容進行動畫處理依賴與UIView來進行顯示,,不能處理用戶事件
為啥有兩套體系 并不是兩套體系?UIView和CALayer是相互依賴的關系,。UIView依賴與calayer提供的內容,,CALayer依賴uivew提供的容器來顯示繪制的內容,。歸根到底CALayer是這一切的基礎,,如果沒有CALayer,,UIView自身也不會存在,,UIView是一個特殊的CALayer實現(xiàn),,添加了響應事件的能力,。UIView本身,,更像是一個CALayer的管理器,,訪問它的跟繪圖和跟坐標有關的屬性,,例如frame,,bounds等等,實際上內部都是在訪問它所包含的CALayer的相關屬性,。
UIView的layer樹形在系統(tǒng)內部,,被系統(tǒng)維護著三份copy(這段理解有點吃不準)。
第一份,,邏輯樹,,就是代碼里可以操縱的,例如更改layer的屬性等等就在這一份,。
第二份,,動畫樹,這是一個中間層,,系統(tǒng)正在這一層上更改屬性,,進行各種渲染操作。
第三份,,顯示樹,,這棵樹的內容是當前正被顯示在屏幕上的內容。
這三棵樹的邏輯結構都是一樣的,,區(qū)別只有各自的屬性,。
UIView的主layer以外,對它的subLayer,也就是子layer的屬性進行更改,,系統(tǒng)將自動進行動畫生成,。
CALayer的坐標系系統(tǒng)和UIView有點不一樣,它多了一個叫anchorPoint的屬性,,它使用CGPoint結構,,但是值域是0~1,也就是按照比例來設置,。這個點是各種圖形變換的坐標原點,,同時會更改layer的position的位置,它的缺省值是{0.5, 0.5},,也就是在layer的中央,。

哈哈,這下夠說一壺的了把,,雖然說完感覺其實沒什么卵用,但是記住一定要說的繪聲繪色,。

參考鏈接如下:

  1. http://o0o0o0o./blog/1728599
  2. http://www.cnblogs.com/pengyingh/articles/2381673.html

2. property 都有哪些常見的字段

strong,,weak,retain,,assign,,copy nomatic,readonly,

3. strong,weak,,retain,,assign,copy nomatic 等的區(qū)別,。

assign: 簡單賦值,,不更改索引計數(shù)(Reference Counting)對基礎數(shù)據(jù)類

copy: 建立一個索引計數(shù)為1的對象,然后釋放舊對象,。對NSString

retain:釋放舊的對象,,將舊對象的值賦予輸入對象,再提高輸入對象的索引計數(shù)為1 ,對其他NSObject和其子類

weakstrong的區(qū)別:weakstrong不同的是 當一個對象不再有strong類型的指針指向它的時候 它會被釋放 ,,即使還有weak型指針指向它,。一旦最后一個strong型指針離去 ,這個對象將被釋放,,所有剩余的weak型指針都將被清除,。

copyretain

  1. copy其實是建立了一個相同的對象,而retain不是.
  2. copy是內容拷貝,,retain是指針拷貝.
  3. copy是內容的拷貝 ,對于像NSString,的確是這樣,,如果拷貝的是 NSArray這時只是copy了指向array中相對應元素的指針.這便是所謂的"淺復制".

atomic是Objc使用的一種線程保護技術,基本上來講,是防止在寫未完成的時候被另外一個線程讀取,,造成數(shù)據(jù)錯誤,。而這種機制是耗費系統(tǒng)資源的,所以在iPhone這種小型設備上,,如果沒有使用多線程間的通訊編程,,那么nonatomic是一個非常好的選擇。

對于 NSString 為什么使用 copy 參考這篇鏈接
http://southpeak./blog/2015/05/10/ioszhi-shi-xiao-ji-di-%5B%3F%5D-qi-2015-dot-05-dot-10/

4.__block__weak修飾符的區(qū)別:

  1. __block不管是ARC還是MRC模式下都可以使用,,可以修飾對象,,還可以修飾基本數(shù)據(jù)類型。
  2. __weak只能在ARC模式下使用,,也只能修飾對象(NSString),,不能修飾基本數(shù)據(jù)類型(int)。
  3. __block對象可以在block中被重新賦值,,__weak不可以,。

4.常見的 Http 狀態(tài)碼有哪些?

http狀態(tài)嗎 :302 是請求重定向,。500以上是服務器錯誤,。400以上是請求鏈接錯誤或者找不到服務器。200以上是正確,。100以上是請求接受成功,。

2-3問題參考鏈接http://zhangmingwei./blog/1748431

5.單例的寫法。在單例中使用數(shù)組要注意什么,?

static PGSingleton *sharedSingleton;

+ (instancetype)sharedSingleton
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedSingleton = [[PGSingleton alloc] init];
    });
    return sharedSingleton;
}

其實上面的還不是標準的單例方法,,標準的單例方法需要重寫 copyWithZone,allocWithZone,init,確保以任何方式創(chuàng)建出來的對象只有一個,這里就不詳細寫了,。

單例使用 NSMutableArray 的時候,,防止多個地方對它同時遍歷和修改的話,需要加原子屬性,。并且property用strong,,并且寫一個遍歷和修改的方法。加上鎖. Lock,UnLock.(PS:考慮性能問題盡量避免使用鎖,,在蘋果的文檔張看到的不要問我為什么,,我也忘了自己查去。,。)

關于單例的參考,,和不要濫用單例的參考

  1. http://www.jianshu.com/p/7486ebfcd93b
  2. http://blog./singletons/

6.static 關鍵字的作用

1.函數(shù)體內 static 變量的作用范圍為該函數(shù)體,不同于 auto 變量,,該變量的內存只被分配一次,,
因此其值在下次調用時仍維持上次的值,;
2.在模塊內的 static 全局變量可以被模塊內所用函數(shù)訪問,但不能被模塊外其它函數(shù)訪問,;
3.在模塊內的 static 函數(shù)只可被這一模塊內的其它函數(shù)調用,,這個函數(shù)的使用范圍被限制在聲明 它的模塊內;
4.在類中的 static 成員變量屬于整個類所擁有,,對類的所有對象只有一份拷貝,;
5.在類中的 static 成員函數(shù)屬于整個類所擁有,這個函數(shù)不接收 this 指針,,因而只能訪問類的static 成員變量,。

7.iOS 中的事件的傳遞:響應鏈

簡要說一下:
事件沿著一個指定的路徑傳遞直到它遇見可以處理它的對象。 首先一個UIApplication 對象從隊列頂部獲取一個事件并分發(fā)(dispatches)它以便處理,。 通常,,它把事件傳遞給應用程序的關鍵窗口對象,該對象把事件傳遞給一個初始對象來處理,。 初始對象取決于事件的類型,。

觸摸事件。 對于觸摸事件,,窗口對象首先嘗試把事件傳遞給觸摸發(fā)生的視圖,。那個視圖被稱為hit-test(點擊測試)視圖。 尋找hit-test視圖的過程被稱為hit-testing, 參見 “Hit-Testing Returns the View Where a Touch Occurred.”
運動和遠程控制事件,。 對于這些事件,窗口對象把shaking-motion(搖晃運動)或遠程控制事件傳遞給第一響應者來處理,。第一響應者請參見 “The Responder Chain Is Made Up of Responder Objects.”

iOS 使用hit-testing來找到事件發(fā)生的視圖,。 Hit-testing包括檢查觸摸事件是否發(fā)生在任何相關視圖對象的范圍內, 如果是,,則遞歸地檢查所有視圖的子視圖,。在視圖層次中的最底層視圖,如果它包含了觸摸點,,那么它就是hit-test視圖,。等 iOS決定了hit-test視圖之后,它把觸摸事件傳遞給該視圖以便處理,。

參考鏈接:http://yishuiliunian./implementate-tableview-to-understand-ios/content/uikit/132event-chains.html

8堆和棧的區(qū)別

管理方式:對于棧來講,,是由編譯器自動管理,無需我們手工控制,;對于堆來說,,釋放工作由程序員控制,容易產生memory leak,。

申請大?。?br>棧:在Windows下,棧是向低地址擴展的數(shù)據(jù)結構,,是一塊連續(xù)的內存的區(qū)域。這句話的意思是棧頂?shù)牡刂泛蜅5淖畲笕萘渴窍到y(tǒng)預先規(guī)定好的,,在 WINDOWS下,,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數(shù)),,如果申請的空間超過棧的剩余空間時,,將提示overflow。因此,,能從棧獲得的空間較小,。

堆:堆是向高地址擴展的數(shù)據(jù)結構,是不連續(xù)的內存區(qū)域,。這是由于系統(tǒng)是用鏈表來存儲的空閑內存地址的,,自然是不連續(xù)的,而鏈表的遍歷方向是由低地址向高地址,。堆的大小受限于計算機系統(tǒng)中有效的虛擬內存,。由此可見,堆獲得的空間比較靈活,,也比較大,。

碎片問題:對于堆來講,頻繁的new/delete勢必會造成內存空間的不連續(xù),,從而造成大量的碎片,,使程序效率降低。對于棧來講,,則不會存在這個問題,,因為棧是先進后出的隊列,他們是如此的一一對應,,以至于永遠都不可能有一個內存塊從棧中間彈出
分配方式:堆都是動態(tài)分配的,,沒有靜態(tài)分配的堆。棧有2種分配方式:靜態(tài)分配和動態(tài)分配,。靜態(tài)分配是編譯器完成的,,比如局部變量的分配。動態(tài)分配由alloca函數(shù)進行分配,,但是棧的動態(tài)分配和堆是不同的,,他的動態(tài)分配是由編譯器進行釋放,無需我們手工實現(xiàn),。
分配效率:棧是機器系統(tǒng)提供的數(shù)據(jù)結構,,計算機會在底層對棧提供支持:分配專門的寄存器存放棧的地址,壓棧出棧都有專門的指令執(zhí)行,,這就決定了棧的效率比較高,。堆則是C/C++函數(shù)庫提供的,,它的機制是很復雜的。

    本站是提供個人知識管理的網絡存儲空間,,所有內容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多