標籤:ios 面試題 擴充
iOS經典面試會問到的一些問題:自己經過半個多月為大家整理出來的,有的答案不是唯一的!
1、 簡述OC中記憶體管理機制。與retain配對使用的方法是dealloc還是release,為什麼?需要與alloc配對使用的方法是dealloc還是release,為什麼?readwrite,readonly,assign,retain,copy,nonatomic 、atomic、strong、weak屬性的作用?
答(1.)記憶體管理機制
a.引用計數 由於iOS沒有記憶體回收機制,ios採用應用計數來確定一個對象是否釋放。
b.改變引用計數的操作alloc,retain,release,copy,dealloc等(具體解釋看第一題)。yu
c.便利構造器
d.自動釋放池 每次對象調用autorelease方法時(obj-c中的正式說法應該是:對象發送autorelease訊息),對象的引用計數並不 真正變化 , 而是向pool中添加一條記錄,記下對象的這種要求。最後當pool發送drain或release訊息時,池中的所有對象的這種要求一一被執行 (即:pool被銷毀前,會通知池中的所有對象,全部發送release訊息真正將引用計數減少,如果對象之前有發送過autorelease訊息)
e.線程 注意當視圖退出時,需要關閉自己所開線程
Release -----,alloc 開闢空間 deaclloc銷毀空間 .手動調用dealloc的時候會強制將引用計數置為0
readwrite,可讀可寫,讓系統產生setter和getterreadonly,只可讀,只產生getter
assign引用計數不會+1,適用於基礎資料型別 (Elementary Data Type).常用於指向儲存於靜態區的變數以及delegate,直接賦值
retain引用計數+1,獲得對象的所有權
copy 複製一個對象,並且儲存在不同的記憶體區.原對象的引用計數不變.遵循NSCoping協議的可以深拷貝
Nonatomic非原子性的,不保證多線程下保護安全atomic原子性,保證多線程下安全.有一個屬性需要多個線程同時訪問一個變數,使用atomic能夠自動加鎖解鎖.
Strong,用於ARC模式下,表明對象屬於強引用.類似於retain,但是比
retain更加安全,只要對象存在擁有者,就可以引用,不會被釋放.只要對象失去了擁有者,立即被拋棄.不必再將已經指向已經釋放的對象的指標指向空.避免了野指標.
Weak類似assign,弱引用.應用計數不會增加.釋放指標自動置為nil;
2、 類變數@protected ,@private,@public,@package,聲明各有什麼含義?
通過->的方式訪問成員變數
@protected受保護的.該類和所有子類中的方法可以直接存取這樣的變數。
@private 變數私人的,該類的方法可以直接存取變數。@public 所有類都可以訪問
@package 表示架構內訪問,外部無法訪問
3、 線程是什麼?進程是什麼?二者有什麼區別和聯絡?
線程,是進程的一個具體執行個體.程式啟動並執行最小單位,是被系統獨立調度和CPU的基本運行單元.進程是作業系統中可以並行工作的基本單元,一個應用程式有一個進程,一個進程中至少有一個線程.進程和線程的主要差別在於它們是不同的作業系統資源管理方式。進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變數,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,所以多進程的程式要比多線程的程式健壯,但在進程切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共用某些變數的並行作業,只能用線程,不能用進程
4、 談談你對多線程開發的理解?ios中有幾種實現多線程的方法?
在一個進程中有多個線程共同存在,每個線程執行各自的任務,相互之間不會干擾,一個線程可以建立或者撤銷其他的線程.讓一個進程可以同時執行很多任務.這就減少了等待時間,
iOS經典面試題