iOS面試題1

而技術開發面試,問一些技術相關的問題是必須的,最新的技術可能人人都趨之若鶩,但有些原理和基礎的也希望都有了解。



這里整理了一些iOS相關的面試題,(可能都已經老掉牙)但是也想跟大家分享下!

如果答案有出入或不準確的地方,也歡迎大家指正。



1.簡述OC中內存管理機制。與retain配對使用的方法是dealloc還是release,為什么?需要與alloc配對使用的方法是dealloc還是release,為什么?readwritereadonlyassignretaincopynonatomic atomicstrongweak屬性的作用??

管理機制:使用了一種叫做引用計數的機制來管理內存中的對象。OC中每個對象都對應著他們自己的引用計數,引用計數可以理解為一個整數計數器,當使用alloc方法創建對象的時候,持有計數會自動設置為1。當你向一個對象發送retain消息 時,持有計數數值會增加1。相反,當你像一個對象發送release消息時,持有計數數值會減小1。當對象的持有計數變為0的時候,對象會釋放自己所占用的內存。

retain(引用計數加1)->release(引用計數減1

alloc(申請內存空間)->dealloc(釋放內存空間)

readwrite: 表示既有getter,也有setter?? (默認)

readonly: 表示只有getter,沒有setter

nonatomic:不考慮線程安全

atomic:線程操作安全?? (默認)

線程安全情況下的settergetter

- (NSString*) value??{?????

????????@synchronized(self) {?????????

????????return [[_value retain] autorelease];?????

}}?

(void) setValue:(NSString*)aValue {?????

?? @synchronized(self) {?????????

?? [aValue retain];?????????

?? [_value release];?????????

?? _value = aValue;?????

}??}

retain: release舊的對象,將舊對象的值賦予輸入對象,再提高輸入對象的索引計數為1

assign: 簡單賦值,不更改索引計數????(默認)

copy: 其實是建立了一個相同的對象,地址不同(retain:指針拷貝??copy:內容拷貝)

strong:ARC下的)和(MRCretain一樣????(默認)

weak:ARC下的)和(MRCassign一樣, weak當指向的內存釋放掉后自動nil化,防止野指針

unsafe_unretained 聲明一個弱應用,但是不會自動nil化,也就是說,如果所指向的內存區域被釋放了,這個指針就是一個野指針了。
autoreleasing
用來修飾一個函數的參數,這個參數會在函數返回的時候被自動釋放。

2.類變量的@protected ,@private,@public,@package,聲明各有什么含義?

@private:作用范圍只能在自身類

@protected:作用范圍在自身類和繼承自己的子類??(默認)

?? @public:作用范圍最大,可以在任何地方被訪問。

@package:這個類型最常用于框架類的實例變量,同一包內能用,跨包就不能訪問


3.線程是什么?進程是什么?二者有什么區別和聯系??

一個程序至少有一個進程,一個進程至少有一個線程:

進程:一個程序的一次運行,在執行過程中擁有獨立的內存單元,而多個線程共享一塊內存

線程:線程是指進程內的一個執行單元。

聯系:線程是進程的基本組成單位

?????? 區別:(1)調度:線程作為調度和分配的基本單位,進程作為擁有資源的基本單位
???????????? (2)
并發性:不僅進程之間可以并發執行,同一個進程的多個線程之間也可并發執行
???????????? (3)
擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬于進程的資源.
???????????? (4)
系統開銷:在創建或撤消進程時,由于系統都要為之分配和回收資源,導致系統的開銷明顯大于創建或撤消線程時的開銷。

舉例說明:操作系統有多個軟件在運行(QQoffice、音樂等),這些都是一個個進程,而每個進程里又有好多線程(比如QQ,你可以同時聊天,發送文件等)



4.談談你對多線程開發的理解?ios中有幾種實現多線程的方法?

好處:

1.使用線程可以把占據時間長的程序中的任務放到后臺去處理

2.用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度

3.程序的運行速度可能加快

在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較有用了。

缺點:

1.如果有大量的線程,會影響性能,因為操作系統需要在它們之間切換。

2.更多的線程需要更多的內存空間。

3.線程的中止需要考慮其對程序運行的影響。

4.通常塊模型數據是在多個線程間共享的,需要防止線程死鎖情況的發生。

實現多線程的方法:

NSObject類方法

NSThread

NSOperation

GCD


5.線程同步和異步的區別?IOS中如何實現多線程的同步?

異步:舉個簡單的例子 就是游戲,游戲會有圖像和背景音樂

同步:是指一個線程要等待上一個線程執行完之后才開始執行當前的線程,上廁所

NSOperationQueuemaxcurrentcount

NSConditionLock

GCD->http://blog.csdn.net/onlyou930/article/details/8225906 <br />



6.假設有一個字符串aabcad,請寫一段程序,去掉字符串中不相鄰的重復字符串,即上述字符串處理之后的輸出結果為:aabcd

NSMutableString * str = [[NSMutableString alloc]initWithFormat;@“aabcad”];

for (int i = 0 ,i < str.length - 1 ;i++){

????unsigned char a = [str characterAtIndex:i];

????for (int j = i + 1 ,j < str.length ,j++){

????????unsigned char b = [str characterAtIndex:j];

????????if (a == b ){

????????????if (j == i + 1){

????????????????}else{

????????????????[str deleteCharactersInRange:NSMakeRange(j, 1)];

????????????????}

????????????}

????????}

????}

NSLog(@“%@”,str);


7.獲取一臺設備唯一標識的方法有哪些?

http://www.cnblogs.com/max5945/archive/2013/06/24/3152292.html<br />

(1)UDID

(2)UUID

(3)MAC Address

(4)OPEN UDID

(5)廣告標識符

(6)Vindor標示符

*ios7以后使用keychain?

??

8.iOS類是否可以多繼承?如果沒有,那可以用其他方法實現嗎?簡述實現過程。

不可以多繼承????protocol實現


9.堆和棧的區別?

堆需要用戶手動釋放內存,而棧則是編譯器自動釋放內存

問題擴展:要知道OCNSString的內存存儲方式



10.iOS本地數據存儲都有哪幾種方式?

NSKeyedArchiver????

?NSUserDefaults

Write寫入方式

?SQLite3

http://blog.csdn.net/tianyitianyi1/article/details/7713103<br />

(問題擴展:什么情況下使用什么樣的數據存儲)

1.NSKeyedArchiver:采用歸檔的形式來保存數據,數據對象需要遵守NSCoding協議,對象對應的類必須提供encodeWithCoder:initWithCoder:方法。缺點:只能一次性歸檔保存以及一次性解壓。所以只能針對小量數據,對數據操作比較笨拙,如果想改動數據的某一小部分,需要解壓或歸檔整個數據。

2.NSUserDefaults:用來保存應用程序設置和屬性、用戶保存的數據。用戶再次打開程序或開機后這些數據仍然存在。NSUserDefaults可以存儲的數據類型包括:NSDataNSStringNSNumberNSDateNSArrayNSDictionary。缺點:如果要存儲其他類型,需要轉換為前面的類型,才能用NSUserDefaults存儲。

3.Write寫入方式:永久保存在磁盤中。第一步:獲得文件即將保存的路徑:第二步:生成在該路徑下的文件:第三步:往文件中寫入數據:最后:從文件中讀出數據:

4. SQLite:采用SQLite數據庫來存儲數據。SQLite作為一中小型數據庫,應用ios中,跟前三種保存方式相比,相對比較復雜一些。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458620.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458620.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458620.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高質量JAVA代碼編寫規范

1. Java 命名約定   除了以下幾個特例之外&#xff0c;命名時應始終采用完整的英文描述符。此外&#xff0c;一般應采用小寫字母&#xff0c;但類名、接口名以及任何非初始單詞的第一個字母要大寫。 1.1 一般概念   * 盡量使用完整的英文描述符   * 采用適用于相關領域的…

MFC中繪制動態曲線

參考&#xff1a; http://blog.csdn.net/zang141588761/article/details/50536788 [轉載]MFC中畫直線和曲線 一、畫直線要想在MFC中畫出有顏色的線條&#xff0c;首先就要設置DC的畫筆&#xff0c;我們可以按如下方法來設置畫筆&#xff1a;第一步&#xff1a;在View類中添加…

博客地址 RSS地址

博客地址 RSS地址 OneVs Den http://onevcat.com/atom.xml 破船之家 http://beyondvincent.com/atom.xml NSHipster http://nshipster.cn/feed.xml Limboy 無網不剩 http://feeds.feedburner.com/lzyy 唐巧的技術博客 http://blog.devtang.com/atom.xml Lex iOS notes http://i…

2015.11.27---Java

public class star{public static void main(String[] args) {System.out.print("ha");}}轉載于:https://www.cnblogs.com/supermeimei/p/5001922.html

QT之深入理解QThread

QT之深入理解QThread 理解QThread之前需要了解下QThread類&#xff0c;QThread擁有的資源如下&#xff08;摘錄于QT 5.1 幫助文檔&#xff09;&#xff1a;在以上資源中&#xff0c;本文重點關注槽&#xff1a;start()&#xff1b;信號&#xff1a;started()、finished()&#…

常見人事問題

整體素養的常見問題 一、請你自我介紹一下你自己&#xff1f; &#xff08;面試官目的&#xff1a;深度了解求職者&#xff0c;看求職者基本的溝通和自我認知能力&#xff09; NO: 只說姓名、年齡、愛好等基本的信息后就沒了。只重復簡歷里的內容&#xff0c;如工作經驗就…

springMVC數據封裝成POJO

springMVC把前臺的數據封裝為POJO與struts2的封裝形式不同。struts2需要在控制器聲明需封裝的POJO&#xff0c;而springMVC不需要任何準備工作&#xff0c;只需在相應的方法的參數中加上需封裝的POJO&#xff0c;當用戶提交表單時&#xff0c;springMVC會根據表單中dom元素的na…

QT輸入輸出(四)之 QProcess

QProcess Qt提供了一個QProcess類用于啟動外部程序并與之通信.這個類是異步工作的&#xff0c;而且在后臺執行&#xff0c;這樣用戶界面就可以始終保持響應。 啟動一個新的進程的操作非常簡單,只需要將待啟動的程序名稱和啟動參數傳遞給start()函數即可. 例如&#xff1a; QObj…

iOS 推送 邏輯

推送 階段一&#xff1a;Provider[服務端]把要發送的消息&#xff0c;目的IOS設備標識打包&#xff0c;發送給APNS&#xff1b; 階段二&#xff1a;APNS在自身的已注冊Push服務的IOS設備列表中&#xff0c;查找有相應標識的IOS設備&#xff0c;并將消息發送到IOS設備&#xff1…

正則提取的url中的域名以及替換域名的方法 preg_match()和preg_replace()

<?php //網站的url$url http://www.baidu.com/index.php;//正則表達式$reg /(http):\/\/([^\/])/i;preg_match($reg, $url,$res);/** $res的結果array (size3)0 > string http://www.baidu.com (length20)1 > string http (length4)2 > string www.baidu.com (…

音視頻開發

command s 截模擬器的屏幕 MP.4只是一個容器 H.264 H.263是真正的格式 H.265正在測試中 avi H.264 H.263 視頻解碼&#xff1a;將H.263 H.264轉換為視頻和音頻的格式 視頻編碼&#xff1a; 解碼&#xff1a;硬解碼&#xff1a;GPU做的解碼 CPU做除了圖片以外的&#…

10.11 安裝pod

原文地址&#xff1a;http://www.jianshu.com/p/5fc15906c53a 感謝。 更新升級10.11 cocoapods安裝出問題最簡單的解決方法 這是因為10.11把cocoapods直接干掉了 sudo gem install -n /usr/local/bin cocoapods 再加一句&#xff0c;完美解決 sudo xcode-select --switch /App…

windows任務管理器中的工作設置內存,內存專用工作集,提交大小詳解

通俗的講工作設置內存是程序占用的物理內存(包含與其他程序共享的一部分), 內存專用工作集是程序獨占的物理內存, 提交大小是程序獨占的內存(包含物理內存和在頁面文件中的內存). 注:頁面文件就是存放不在物理內存中的內存,文件路徑一般在C:\pagefile.sys,目的是為了能夠讓更…

coreData mapView #include

一、coreData 需要導入系統庫CoreData 新建文件的時候選core data 中的Data Model 然后加相應的表 加完表后 在Model.xcdatamodeld中新建文件 選coredata中的第三個 即可 如果兩個表有聯系 就將附表放到主表中 在build Setting中&#xff0c;輸入search 在Framework Searc…

淺談 C++ 中的 new/delete 和 new[]/delete[]

來自&#xff1a;http://www.cnblogs.com/hazir/p/new_and_delete.html 在 C 中&#xff0c;你也許經常使用 new 和 delete 來動態申請和釋放內存&#xff0c;但你可曾想過以下問題呢&#xff1f; new 和 delete 是函數嗎&#xff1f;new [] 和 delete [] 又是什么&#xff1f…

JavaScript中的原型繼承原理

在JavaScript當中&#xff0c;對象A如果要繼承對象B的屬性和方法&#xff0c;那么只要將對象B放到對象A的原型鏈上即可。而某個對象的原型鏈&#xff0c;就是由該對象開始&#xff0c;通過__proto__屬性連接起來的一串對象。__proto__屬性是JavaScript對象中的內部屬性&#xf…

XMPP

XMPP不支持視頻聊天 支持文字聊天 但對于圖片和語音聊天支持的不好 那么就將他們轉成NSData的形式 IM Instance Message 即時聊天 聊天系統中 XMPP主要做兩個人的聊天和群聊&#xff0c;只用了這兩個功能 還有一個HTTP的服務器 &#xff0c;他是一個旁路服務器 XMPP底層…

QT 調試

QT調試&#xff08;參考下面的說明就可以正常調試&#xff09;&#xff1a;http://blog.csdn.net/wchengshen/article/details/50254731http://blog.csdn.net/sx341125/article/details/53606534 QT調用DLL&#xff1a; Qt中調用VS編譯dll的方法(一)----顯式調用 qt使用動態庫(…

建模元件有哪些在MapleSim中

信號庫&#xff1a;包含通用信號模塊、布爾、控制器、離散信號模塊、信號源、線性信號模塊、非線性信號模塊、時間離散信號模塊、查詢表、信號轉換器、數學運算、關系元件、特殊信號模塊&#xff0c;應用案例。 電子庫&#xff1a;包含電阻、運算放大器、二極管、步進電機、模擬…

iOS小筆記

controller&#xff1a;連接二者的橋梁&#xff1b;cocoa frameworks 有兩個框架&#xff1a;foundationfoundation 是cocoa中最基本的一些類&#xff1b;再mac應用程序中負責對象管理&#xff0c;內存管理&#xff0c;容器等相關數據&#xff1b;uikit&#xff1a;uikit&…