你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS技巧綜合 >> 開始整理iOS職位面試問題及答案

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

編輯:IOS技巧綜合
[摘要]本文是對開始整理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的基本數據類型有什麼區別?如:NSInteger和int

object-c的數據類型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,這些都是class,創建後便是對象,而C語言的基本數據類型int,只是一定字節的內存空間,用於存放數值;NSInteger是基本數據類型,並不是NSNumber的子類,當然也不是NSObject的子類。NSInteger是基本數據類型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中圖片的加載顯示了。一個延時載,避免內存過高,一個異步加載,避免線程堵塞。

  

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved