iOS經典面試會問到的1些問題:自己經過半個多月為大家整理出來的,有的答案不是唯1的!
1、 簡述OC中內存管理機制。與retain配對使用的方法是dealloc還是release,為何?需要與alloc配對使用的方法是dealloc還是release,為何?readwrite,readonly,assign,retain,copy,nonatomic 、atomic、strong、weak屬性的作用?
答(1.)內存管理機制
a.援用計數 由于iOS沒有垃圾回收機制,ios采取利用計數來肯定1個對象是不是釋放。
b.改變援用計數的操作alloc,retain,release,copy,dealloc等(具體解釋看第1題)。yu
c.便利構造器
d.自動釋放池 每次對象調用autorelease方法時(obj-c中的正式說法應當是:對象發送autorelease消息),對象的援用計數其實不 真正變化 , 而是向pool中添加1條記錄,記下對象的這類要求。最后當pool發送drain或release消息時,池中的所有對象的這類要求逐一被履行 (即:pool被燒毀前,會通知池中的所有對象,全部發送release消息真正將援用計數減少,如果對象之前有發送過autorelease消息)
e.線程 注意當視圖退出時,需要關閉自己所開線程
Release -----,alloc 開辟空間 deaclloc燒毀空間 .手動調用dealloc的時候會強迫將援用計數置為0
readwrite,可讀可寫,讓系統生成setter和getter readonly,只可讀,只生成getter
assign援用計數不會+1,適用于基本數據類型.經常使用于指向貯存于靜態區的變量和delegate,直接賦值
retain援用計數+1,取得對象的所有權
copy 復制1個對象,并且貯存在不同的內存區.原對象的援用計數不變.遵守NSCoping協議的可以深拷貝
Nonatomic非原子性的,不保證多線程下保護安全 atomic原子性,保證多線程下安全.有1個屬性需要多個線程同時訪問1個變量,使用atomic能夠自動加鎖解鎖.
Strong,用于ARC模式下,表明對象屬于強援用.類似于retain,但是比
retain更加安全,只要對象存在具有者,就能夠援用,不會被釋放.只要對象失去了具有者,立即被拋棄.沒必要再將已指向已釋放的對象的指針指向空.避免了野指針.
Weak類似assign,弱援用.利用計數不會增加.釋放指針自動置為nil;
2、 類變量@protected ,@private,@public,@package,聲明各有甚么含義?
通過->的方式訪問成員變量
@protected受保護的.該類和所有子類中的方法可以直接訪問這樣的變量。
@private 變量私有的,該類的方法可以直接訪問變量。@public 所有類都可以訪問
@package 表示框架內訪問,外部沒法訪問
3、 線程是甚么?進程是甚么?2者有甚么區分和聯系?
線程,是進程的1個具體實例.程序運行的最小單位,是被系統獨立調度和CPU的基本運行單元.進程是操作系統中可以并行工作的基本單元,1個利用程序有1個進程,1個進程中最少有1個線程.進程和線程的主要差別在于它們是不同的操作系統資源管理方式。進程有獨立的地址空間,1個進程崩潰后,在保護模式下不會對其它進程產生影響,而線程只是1個進程中的不同履行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,1個線程死掉就等于全部進程死掉,所以多進程的程序要比多線程的程序硬朗,但在進程切換時,耗費資源較大,效力要差1些。但對1些要求同時進行并且又要同享某些變量的并發操作,只能用線程,不能用進程
4、 談談你對多線程開發的理解?ios中有幾種實現多線程的方法?
在1個進程中有多個線程共同存在,每一個線程履行各自的任務,相互之間不會干擾,1個線程可以創建或撤消其他的線程.讓1個進程可以同時履行很多任務.這就減少了等待時間,
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈