開始整理iOS職位面試問題及答案,開始整理ios職位面試

來源:互聯網
上載者:User

開始整理iOS職位面試問題及答案,開始整理ios職位面試

Object-c的類可以多重繼承麼?可以實現多個介面麼?Category是什麼?重寫一個類的方式用繼承好還是分類好?為什麼?

答: Object-c的類不可以多重繼承;可以實現多個介面,通過實現多個介面可以完成C++的多重繼承;Category是類別,一般情況用分類好,用Category去重寫類的方法,僅對本Category有效,不會影響到其他類與原有類的關係。

  

#import 跟#include 又什麼區別,@class呢, #import<> 跟 #import””又什麼區別?

答:#import是Objective-C匯入標頭檔的關鍵字,#include是C/C++匯入標頭檔的關鍵字,使用#import標頭檔會自動只匯入一次,不會重複匯入,相當於#include和#pragma once;@class告訴編譯器某個類的聲明,當執行時,才去查看類的實現檔案,可以解決標頭檔的相互包含;#import<>用來包含系統的標頭檔,#import””用來包含使用者標頭檔。

 

  

屬性readwrite,readonly,assign,retain,copy,nonatomic 各是什麼作用,在那種情況下用?

 

1. readwrite 是可讀可寫特性;需要產生getter方法和setter方法時2. readonly 是唯讀特性 只會產生getter方法 不會產生setter方法 ;不希望屬性在類外改變3. assign 是賦值特性,setter方法將傳入參數賦值給執行個體變數;僅設定變數時;4. retain 表示持有特性,setter方法將傳入參數先保留,再賦值,傳入參數的retaincount會+1;5. copy 表示賦值特性,setter方法將傳入對象複製一份;需要完全一份新的變數時。6. nonatomic 非原子操作,決定編譯器產生的setter getter是否是原子操作,atomic表示多安全執行緒,一般使用nonatomic

 

  

寫一個setter方法用於完成@property (nonatomic,retain)NSString *name,寫一個setter方法用於完成@property(nonatomic,copy)NSString *name

- (void) setName:(NSString*) str {  [str retain];  [name release];  name = str;
}
- (void)setName:(NSString *)str {  id t = [str copy];  [name release];  name = t;}

 

對於語句NSString*obj = [[NSData alloc] init]; obj在編譯時間和運行時分別時什麼類型的對象?

編譯時間是NSString的類型;運行時是NSData類型的對象

 

  

常見的object-c的資料類型有那些, 和C的基礎資料型別 (Elementary Data Type)有什麼區別?如:NSInteger和int

 

object-c的資料類型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,這些都是class,建立後便是對象,而C語言的基礎資料型別 (Elementary Data Type)int,只是一定位元組的記憶體空間,用於存放數值;NSInteger是基礎資料型別 (Elementary Data Type),並不是NSNumber的子類,當然也不是NSObject的子類。NSInteger是基礎資料型別 (Elementary Data Type)Int或者Long的別名(NSInteger的定義typedef long NSInteger),它的區別在於,NSInteger會根據系統是32位還是64位來決定是本身是int還是Long。

 

 

id 聲明的對象有什麼特性?

id 聲明的對象具有運行時的特性,即可以指向任意類型的objcetive-c的對象;

 

  

Object C中建立線程的方法是什麼?如果在主線程中執行代碼,方法是什麼?如果想延時執行代碼、方法又是什麼?

線程建立有三種方法:使用NSThread建立、使用GCD的dispatch、使用子類化的NSOperation,然後將其加入NSOperationQueue;在主線程執行代碼,方法是performSelectorOnMainThread,如果想延時執行代碼可以用performSelector:onThread:withObject:waitUntilDone:

 

 

淺複製和深複製的區別?

答案:淺層複製:只複製指向對象的指標,而不複製引用對象本身。深層複製:複製引用對象本身。意思就是說我有個A對象,複製一份後得到A_copy對象後,對於淺複製來說,A和A_copy指向的是同一個記憶體資源,複製的只不過是是一個指標,對象本身資源還是只有一份,那如果我們對A_copy執行了修改操作,那麼發現A引用的對象同樣被修改,這其實違背了我們複製拷貝的一個思想。深複製就好理解了,記憶體中存在了兩份獨立對象本身。用網上一哥們通俗的話將就是:淺複製好比你和你的影子,你完蛋,你的影子也完蛋深複製好比你和你的複製人,你完蛋,你的複製人還活著。

  

我們說的oc是動態運行時語言是什麼意思?

答案:多態。 主要是將資料類型的確定由編譯時間,延遲到了運行時。這個問題其實淺涉及到兩個概念,運行時和多態。簡單來說,運行時機制使我們直到運行時才去決定一個對象的類別,以及調用該類別對象指定方法。多態:不同對象以自己的方式響應相同的訊息的能力叫做多態。意思就是假設生物類(life)都用有一個相同的方法-eat;那人類屬於生物,豬也屬於生物,都繼承了life後,實現各自的eat,但是調用是我們只需調用各自的eat方法。也就是不同的對象以自己的方式響應了相同的訊息(響應了eat這個選取器)。因此也可以說,運行時機制是多態的基礎?~~~

  

通知和協議的不同之處?

答案:協議有控制鏈(has-a)的關係,通知沒有。首先我一開始也不太明白,什麼叫控制鏈(專業術語了~)。但是簡單分析下通知和代理的行為模式,我們大致可以有自己的理解簡單來說,通知的話,它可以一對多,一條訊息可以發送給多個訊息接受者。代理按我們的理解,到不是直接說不能一對多,比如我們知道的明星經濟代理人,很多時候一個經濟人負責好幾個明星的事務。只是對於不同明星間,代理的事物對象都是不一樣的,一一對應,不可能說明天要處理A明星要一個發布會,代理人發出處理髮布會的訊息後,別稱B的發布會了。但是通知就不一樣,他只關心發出通知,而不關心多少接收到感興趣要處理。因此控制鏈(has-a從英語單詞大致可以看出,單一擁有和可控制的對應關係。

  

frame和bounds有什麼不同?

答案:frame指的是:該view在父view座標系統中的位置和大小。(參照點是父親的座標系統)bounds指的是:該view在本身座標系統中 的位置和大小。(參照點是本身座標系統)

 

NSOperation queue?

 

答案:存放NSOperation的集合類。操作和操作隊列,基本可以看成java中的線程和線程池的概念。用於處理ios多線程開發的問題。網上部分資料提到一點是,雖然是queue,但是卻並不是帶有隊列的概念,放入的操作並非是按照嚴格的先進現出。這邊又有個疑點是,對於隊列來說,先進先出的概念是Afunc添加進隊列,Bfunc緊跟著也進入隊列,Afunc先執行這個是必然的,但是Bfunc是等Afunc完全操作完以後,B才開始啟動並且執行,因此隊列的概念離亂上有點違背了多執行緒這個概念。但是轉念一想其實可以參考銀行的取票和叫號系統。因此對於A比B先排隊取票但是B率先執行完操作,我們亦然可以感性認為這還是一個隊列。但是後來看到一票關於這操作隊列話題的文章,其中有一句提到“因為兩個操作提交的時間間隔很近,線程池中的線程,誰先啟動是不定的。”瞬間覺得這個queue名字有點忽悠人了,還不如pool~綜合一點,我們知道他可以比較大的用處在於可以幫組多線程編程就好了。

 

  

什麼是消極式載入?

答案:懶漢模式,只在用到的時候才去初始化。也可以理解成延時載入。我覺得最好也最簡單的一個列子就是tableView中圖片的載入顯示了。一個延時載,避免記憶體過高,一個非同步載入,避免線程堵塞。

 

 

 

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.