iOS之面試題

來源:互聯網
上載者:User

標籤:

之前看了很多面試題,感覺要不是不夠就是過於冗餘,於是我將網上的一些面試題進行了刪減和重排,現在分享給大家。

@property 後面可以有哪些修飾符?

安全執行緒的:(atomic,nonatomic )nonatomic 非原子操作,決定編譯器產生的setter getter是否是原子操作,atomic表示多安全執行緒,一般使用nonatomic.存取權限的(readonly,readwrite)readwrite 是可讀可寫特性;需要產生getter方法和setter方法時; readonly是唯讀特性,只會產生getter方法,不會產生setter方法,不希望屬性在類外改變記憶體管理(ARC)    (assign,strong,weak,copy)記憶體管理(MRC)    (assign,retain,copy)    assign 是賦值特性,setter方法將傳入參數賦值給執行個體變數,僅設定變數時;    retain 表示持有特性,setter方法將傳入參數先保留,再賦值,傳入參數的retaincount會+1;    copy 表示賦值特性,setter方法將傳入對象複製一份;需要完全一份新的變數時。指定方法名稱    setter=    getter=

什麼情況使用 weak 關鍵字,相比 assign 有什麼不同?比如:

在ARC中,出現循環參考的時候,必須要有一端使用weak,比如:自訂View的代理屬性已經自身已經對它進行一次強應用,沒有必要在強引用一次,此時也會使用weak,自訂View的子控制項屬性一般也使用weak;但是也可以使用strong weak當對象銷毀的時候,指標會被自動化佈建為nil,而assign不會* assigin 可以用非OC對象,而weak必須用於OC對象

怎麼用 copy 關鍵字(深複製與淺複製)?

對象拷貝有兩種方式:淺複製和深複製。顧名思義,淺複製,並不拷貝對象本身,僅僅是拷貝指向對象的指標;深複製是直接拷貝整個對象記憶體到另一塊記憶體中。在非集合類對象中:對immutable對象進行copy操作,是指標複製,mutableCopy操作時內容複寫;對mutable對象進行copy和mutableCopy都是內容複寫。用@property聲明 NSString、NSArray、NSDictionary 經常使用copy關鍵字,是因為他們有對應的可變類型:NSMutableString、NSMutableArray、NSMutableDictionary,他們之間可能進行賦值操作,為確保對象中的字串值不會無意間變動,應該在設定新屬性值時拷貝一份。字串使用copy是為了外部把字串內容改了,影響該屬性block使用copy是在MRC遺留下來的,在MRC中,方法內部的block是在在棧區的,使用copy可以把它放到堆區.在ACR中對於block使用copy還是strong效果是一樣的

用@property聲明的NSString(或NSArray,NSDictionary)經常使用copy關鍵字,為什嗎?如果改用strong關鍵字,可能造成什麼問題?

因為父類指標可以指向子類對象,使用copy的目的是為了讓本對象的屬性不受外界影響,使用copy無論給我傳入是一個可變對象還是不可對象,我本身持有的就是一個不可變的副本.如果我們使用是strong,那麼這個屬性就有可能指向一個可變對象,如果這個可變對象在外部被修改了,那麼會影響該屬性.

這個寫法會出什麼問題: @property (copy) NSMutableArray *array;

添加,刪除,修改數組內的元素的時候,程式會因為找不到對於的方法而崩潰.因為copy就是複製一個不可變NSArray的對象

如何讓自己的類用 copy 修飾符?

你是說讓我的類也支援copy的功能嗎?如果面試官說是:    遵守NSCopying協議    實現 - (id)copyWithZone:(NSZone *)zone; 方法如果面試官說否,是屬性中如何使用copy    在使用字串和block的時候一般都使用copy

@property 的本質是什嗎?ivar、getter、setter 是如何產生並添加到這個類中的

在普通的OC對象中,@property就是編譯其自動幫我們產生一個私人的成員變數和setter與getter方法的聲明和實現我為了搞清屬性是怎麼實現的,曾經反編譯過相關的代碼,他大致產生了五個個東西OBJC_IVAR_$類名$屬性名稱 該屬性的位移量setter與getter方法對應的實現函數ivar_list 就是成員變數列表method_list 方法列表prop_list 屬性列表也就是說我們每次在增加一個屬性,系統都會在ivar_list中添加一個成員變數的描述,在method_list中增加setter與getter方法的描述,在屬性列表中增加一個屬性的屬性的描述,然後計算該屬性在對象中的位移量,然後伸出setter與getter方法對應的實現,在setter方法方法中從位移量的位置開始賦值,在getter方法中從位移量開始取值,為了能夠讀取正確位元組數,系統對象位移量的指標類型進行了類型強轉.

@protocol 和 category 中如何使用 @property

在protocol中使用property只會產生setter和getter方法聲明,我們使用屬性的目的,是希望遵守我協議的對象的實現該屬性category 使用 @property 也是只會產生setter和getter方法的聲明,如果我們真的需要給category增加屬性的實現,需要藉助於運行時的兩個函數    objc_setAssociatedObject    objc_getAssociatedObject

@synthesize和@dynamic分別有什麼作用?

@property有兩個對應的詞,一個是@synthesize,一個是@dynamic。如果@synthesize和@dynamic都沒寫,那麼預設的就是@syntheszie var = _var;@synthesize的語義是如果你沒有手動實現setter方法和getter方法,那麼編譯器會自動為你加上這兩個方法。@dynamic告訴編譯器,屬性的setter與getter方法由使用者自己實現,不自動產生。(當然對於readonly的屬性只需提供getter即可)。假如一個屬性被聲明為@dynamic var,然後你沒有提供@setter方法和@getter方法,編譯的時候沒問題,但是當程式運行到instance.var =someVar,由於缺setter方法會導致程式崩潰;或者當運行到 someVar = var時,由於缺getter方法同樣會導致崩潰。編譯時間沒問題,運行時才執行相應的方法,這就是所謂的動態綁定。

ARC下,不顯示指定任何屬性關鍵字時,預設的關鍵字都有哪些?

對應基礎資料型別 (Elementary Data Type)預設關鍵字是atomic,readwrite,assign對於普通的OC對象atomic,readwrite,strong

#import 跟#include 又什麼區別 #import<> 跟 #import”“又什麼區別?

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

objc中向一個nil對象發送訊息將會發生什嗎?

在Objective-C中向nil發送訊息是完全有效——只是在運行時不會有任何作用:    如果一個方法傳回值是一個對象,那麼發送給nil的訊息將返回0(nil)。例如:Person * motherInlaw = [ aPerson spouse] mother];如果spouse對象為nil,那麼發送給nil的訊息mother也將返回nil。    如果方法傳回值為指標類型,其指標大小為小於或者等於sizeof(void*),float,double,long double 或者long long的整型標量,發送給nil的訊息將返回0。    如果方法傳回值為結構體,發送給nil的訊息將返回0。結構體中各個欄位的值將都是0。    如果方法的傳回值不是上述提到的幾種情況,那麼發送給nil的訊息的傳回值將是未定義的。

objc中向一個對象發送訊息[obj foo]和objc_msgSend()函數之間有什麼關係?

該方法編譯之後就是objc_msgSend()函數調用.如果我沒有記錯的大概是這樣的.((void ()(id, SEL))(void )objc_msgSend)((id)obj, sel_registerName("foo"));

什麼時候會報unrecognized selector的異常?

當該對象上某個方法,而該對象上沒有實現這個方法的時候

一個objc對象如何進行記憶體布局?(考慮有父類的情況)

所有父類的成員變數和自己的成員變數都會存放在該對象所對應的儲存空間中.每一個對象內部都一個isA指標,指向他的類對象,類對象中存放著本對象的對象方法列表和成員變數的列表,屬性列表,它內部也有一個isA指標指向元對象(meta class),元對象內部存放的是類方法列表,類對象內部還有一個superclass的指標,指向他的父類對象根對象就是NSobject

一個objc對象的isa的指標指向什嗎?有什麼作用?

指向他的類對象,從而可以找到對象上的方法

下面的代碼輸出什嗎?

@implementation Son : Father
- (id)init
{
self = [super init];
if (self) {
NSLog(@”%@”, NSStringFromClass([self class]));
NSLog(@”%@”, NSStringFromClass([super class]));
}
return self;
}
@end

輸出的結果都是:Son,原因:super 和 self 都是指向的本執行個體對象的,不同的是,super調用的跳過本類方法,調用父類的方法父類方法的class方法本來都是在基類中實現的,所以無論使用self和super調用都是一樣的.

runtime如何通過selector找到對應的IMP地址?(分別考慮類方法和執行個體方法)

每一個類對象中都一個方法列表,方法列表中記錄著方法的名稱,方法實現,以及參數類型,其實selector本質就是方法名稱,通過這個方法名稱就可以在方法列表中找到對應的方法實現.

objc中的類方法和執行個體方法有什麼本質區別和聯絡?

類方法    類方法是屬於類對象的    類方法只能通過類對象調用    類方法中的self是類對象    類方法可以調用其他的類方法    類方法中不能訪問成員變數    類方法中不定直接調用對象方法執行個體方法    執行個體方法是屬於執行個體對象的    執行個體方法只能通過執行個體對象調用    執行個體方法中的self是執行個體對象    執行個體方法中可以訪問成員變數    執行個體方法中直接調用執行個體方法    執行個體方法中也可以調用類方法(通過類名)

能否向編譯後得到的類中增加執行個體變數?能否向運行時建立的類中添加執行個體變數?為什嗎?

因為編譯後的類已經註冊在 runtime 中,類結構體中的 objc_ivar_list 執行個體變數的鏈表 和 instance_size 執行個體變數的記憶體大小已經確定,同時runtime 會調用 class_setIvarLayout 或 class_setWeakIvarLayout 來處理 strong weak 引用。所以不能向存在的類中添加執行個體變數,運行時建立的類是可以添加執行個體變數,調用 class_addIvar 函數。但是得在調用 objc_allocateClassPair 之後,objc_registerClassPair 之前,原因同上。

runloop和線程有什麼關係?

  1. 每一個線程中都一個runloop,只有主線的的runloop預設是開啟的,其他線程的runloop是預設沒有開啟的
  2. 可以通過CFRunLoopRun() 函數來開啟一個事件迴圈
  3. 看SDWebImage源碼的時候見到有這麼用過.

runloop的mode作用是什嗎?

model 主要是用來指定時間在運行迴圈中的優先順序的蘋果公開提供的 Mode 有兩個:kCFRunLoopDefaultModekCFRunLoopCommonModes如果我們把一個NSTimer對象以kCFRunLoopDefaultMode添加到主運行迴圈中的時候,當一直有使用者事件處理的時候,NSTimer將不再被調度,如果我們把一個NSTimer對象以kCFRunLoopCommonModes添加到主運行迴圈中的時候,當一直有使用者事件處理的時候,NSTimer還能正常的調度,互不影響.

runloop內部是如何?的?

1.他是一個死迴圈2.如果事件隊列中存放在事件,那就取出事件,執行相關代碼3.如果沒有事件,就掛起,等有事件了,立即喚醒事件迴圈,開始執行.

不手動指定autoreleasepool的前提下,一個autorealese對象在什麼時刻釋放?(比如在一個vc的viewDidLoad中建立)

在每次事件迴圈開始建立自動釋放池,在每次事件結束銷毀自動釋放池以viewDidLoad方法為例,可以理解為在viewDidLoad方法開始執行之前建立自動釋放池,在viewDidLoad方法執行之後銷毀自動釋放吃

蘋果是如何?autoreleasepool的?

1.我猜想autoreleasepool 本質就是一個隊列(數組),2.當調用autorelease的時候會把該對象添加到autoreleasepool中,並且把引用計數+13.當autoreleasepool即將銷毀的時候,把其中的所有對象進行一次release操作

使用block時什麼情況會發生引用迴圈,如何解決?

  只要是一個對象對該block進行了強引用,在block內部有直接使用到該對象,用__weak修飾self.

在block內如何修改block外部變數?

通過 __bock修改的外部變數,可以在block內部修改想裝B的話可以說一下__bock內部做了什麼事

使用系統的某些block api(如UIView的block版本寫動畫時),是否也考慮引用迴圈問題?

一般不用考慮,因為官方文檔中沒有告訴我們要注意發生強引用,所以推測系統控制項一般沒有對這些block進行強引用,所以我們可以不用考慮迴圈強引用的問題

GCD的隊列(dispatch_queue_t)分哪兩種類型?

串列隊列和並行隊列

如何用GCD同步若干個非同步呼叫?(如根據若干個url非同步載入多張圖片,然後在都下載完成後合成一張整圖)

總體上說:  使用 dispatch group,然後 wait forever 等待完成, 或者採取 group notify 來通知回調。細節:1.建立非同步隊列2.建立dispatch_group  dispatch_group_t =  dispatch_group_create()3.通過組來執行非同步下載任務dispatch_group_async(queueGroup, aQueue, ^{          NSLog(@"下載圖片.");    }); 4.等到所有任務完成   dispatch_group_wait(queueGroup, DISPATCH_TIME_FOREVER);5.合成圖片

dispatch_barrier_async的作用是什嗎?

barrier:是障礙物的意思,在多個並行任務中間,他就像是一個隔離帶,把前後的並行任務分開.dispatch_barrier_async 作用是在並行隊列中,等待前面操作並行任務完成再執行dispatch_barrier_async中的任務,如果後面還有並行任務,會開始執行後續的並行任務

蘋果為什麼要廢棄dispatch_get_current_queue?

容易誤用造成死結

以下代碼運行結果如何?

  • (void)viewDidLoad
    {
    [super viewDidLoad];
    NSLog(@”1”);
    dispatch_sync(dispatch_get_main_queue(), ^{
    NSLog(@”2”);
    });
    NSLog(@”3”);
    }

    只能輸出1,然後線程主線程死結

如何手動觸發一個value的KVO

1.通過setValue:forKey: 給屬性賦值2.通過setValue:forKeyPath: 給屬性賦值3.直接調用setter方法方法給屬性賦值4.直接通過指標給屬性賦值5.給這個value設定一個值,就可以觸發了

KVC和KVO的keyPath一定是屬性嗎?

一個可以是成員變數

IBOutlet連出來的視圖屬性為什麼可以被設定成weak?

因為視圖已經對它有一個強引用了

IB中User Defined Runtime Attributes如何使用?

User Defined Runtime Attributes 是一個不被看重但功能非常強大的的特性,它能夠通過KVC的方式配置一些你在interface builder 中不能配置的屬性。當你希望在IB中作儘可能多得事情,這個特效能夠協助你編寫更加輕量級的viewcontroller

類別的作用?繼承和類別在實現中有何區別?用哪個好? 類別和類擴充的區別(怎麼向類中添加屬性).

ategory 可以在不獲悉,不改變原來代碼的情況下往裡面添加新的方法,只能添加,不能刪除修改。並且如果類別和原來類中的方法產生名稱衝突,則類別將覆蓋原來的方法,因為類別具有更高的優先順序。類別主要有3個作用:(1)將類的實現分散到多個不同檔案或多個不同架構中。(2)建立對私人方法的前向引用。(3)向對象添加非正式協議。繼承可以增加,修改或者刪除方法,並且可以增加屬性。類別好,不影響類與原有類的關係.category和extensions的不同在於後者可以添加屬性。

MVC設計模式是什嗎?有什麼特性?為什麼在iPhone上被廣泛運用? 你還熟悉什麼設計模式?

MVC設計模式考慮三種對象:模型對象、視圖對象、和控制器對象。模型對象代表 特別的知識和專業技能,它們負責保有應用程式的資料和定義操作資料的邏輯。視圖對象知道如何顯示應用程式的模型資料,而且可能允許使用者對其進行編輯。控制 器對象是應用程式的視圖對象和模型對象之間的協調者。設計模式:並不是一種新技術,而是一種編碼經驗,使用比如java中的介面,iphone中的協議,繼承關係等基本手段,用比較成熟的邏輯去處理某一種類型的事情,總結為所謂設計模式。物件導向編程中,java已經歸納了23種設計模式。mvc設計模式 :模型,視圖,控制器,可以將整個應用程式在思想上分成三大塊,對應是的資料的儲存或處理,前台的顯示,商務邏輯的控制。 Iphone本身的設計思想就是遵循mvc設計模式。其不屬於23種設計模式範疇。代理模式:代理模式給某一個對象提供一個代理對象,並由代理對象控制對來源物件的引用.比如一個工廠生產了產品,並不想直接賣給使用者,而是搞了很多代理商,使用者可以直接找代理商買東西,代理商從工廠進貨.常見的如QQ的自動回複就屬於代理攔截,代理模式在iphone中得到廣泛應用. 單例模式:說白了就是一個類不通過alloc方式建立對象,而是用一個靜態方法返回這個類的對象。系統只需要擁有一個的全域對象,這樣有利於我們協調系統整體的行為,比如想獲得[UIApplication sharedApplication];任何地方調用都可以得到 UIApplication的對象,這個對象是全域唯一的。觀察者模式: 當一個物體發生變化時,會通知所有觀察這個物體的觀察者讓其做出反應。實現起來無非就是把所有觀察者的對象給這個物體,當這個物體的發生改變,就會調用遍曆所有觀察者的對象調用觀察者的方法從而達到通知觀察者的目的。

obj-c的優缺點

objc優點:  1)Cateogies   2) Posing  3) 動態識別?  4) 指標計算   5)彈性訊息傳遞  6) 不是一個過度複雜的 C 衍生語言  7) Objective-C 與 C++ 可混合編程   缺點:   1) 不支援命名空間   2)  不支援運算子多載

代理、通知、block的理解

第一就是代理,這也是很常用的方式,特點是一對一的形式,而且邏輯結構非常清晰。實現起來較為簡單:寫協議 ,設定代理這個屬性, 最好在你想通知代理做事情的方法中調用即可。當然這裡面有一些細節,包括①協議定義時,請用關鍵字@required,和@optional來明確代理是否必須實現某些方法②代理的類型需用id類型,並寫明要遵守的協議③就是在調用代理方法的時候需要判斷代理是否實現該方法。第二就是通知,通知的優點很明顯,他是一對多的形式,而且可以在任意對象之間傳遞,不需要二者有聯絡,當然他的實現和代理相比較稍微繞一點,註冊,發通知,收通知。這裡面的注意點就是 ①對於系統沒有定義的事件監聽時需要自己發通知,這是你就需要定義一個key,字串類型,這也是通知的一個弊端,你需要拷貝到收通知的對象,避免寫錯一個字母而無法收通知的尷尬 ②就是註冊的通知中樞需要手動移除,不然除了效能的問題還會有其他的問題出現,比如說一個控制器消失了之後還有因為某些事件而發出通知,造成不想要的結果。第三就是block了,這是蘋果後來才加入的,也是目前開發比較常用的一種方式,功能比較強大,但是在理解和使用上可能需要一段時間摸索和熟悉。他的最大特點就是回調,而且回調時可以傳入參數,最重要的是,無論在哪調用,block的執行都會回到block建立的地方執行,而非調用的地方。而block本身可以封裝一段代碼,一段代碼你懂的,很多人在初學時會被搞暈,甚至在block的聲明上就糾結,其實很正常,多用就好。

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

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

鍵路徑(keyPath)、索引值編碼(KVC)和索引值觀察(KVO)

鍵路徑在一個給定的實體中,同一個屬性的所有值具有相同的資料類型。鍵-值編碼技術用於進行這樣的尋找—它是一種間接訪問對象屬性的機制。 - 鍵路徑是一個由用點作分隔字元的鍵組成的字串,用於指定一個串連在一起的對象性質序列。第一個鍵的性質是由先前的性質決定的,接下來每個鍵的值也是相對於其前面的性質。鍵路徑使您可以以獨立於模型實現的方式指定相關對象的性質。通過鍵路徑,您可以指定對象圖中的一個任意深度的路徑,使其指向相關對象的特定屬性。索引值編碼KVC索引值編碼是一種間接訪問對象的屬性使用字串來識別屬性,而不是通過調用存取方法,直接或通過執行個體變數訪問的機制,非物件類型的變數將被自動封裝或者解鎖成對象,很多情況下會簡化程式碼;KVC的缺點:一旦使用 KVC 你的編譯器無法檢查出錯誤,即不會對設定的鍵、鍵路徑進行錯誤檢查,且執行效率要低於合成存取器方法和自定的 setter 和 getter 方法。因為使用 KVC 索引值編碼,它必須先解析字串,然後在設定或者訪問對象的執行個體變數。索引值觀察KVO索引值觀察機制是一種能使得對象擷取到其他對象屬性變化的通知 ,極大的簡化了代碼。實現 KVO 索引值觀察模式,被觀察的對象必須使用 KVC 索引值編碼來修 改它的執行個體變數,這樣才能被觀察者觀察到。因此,KVC是KVO的基礎。

多線程編程

NSThread:當需要進行一些耗時操作時會把耗時的操作放到線程中。線程同步:多個線程同時訪問一個資料會出問題,NSlock、線程同步塊、@synchronized(self){}。NSOperationQueue操作隊列(不需考慮線程同步問題)。編程的重點都放在main裡面,NSInvocationOperation、BSBlockOperation、自訂Operation。建立一個操作綁定相應的方法,當把操作添加到操作隊列中時,操作綁定的方法就會自動執行了,當把操作添加到操作隊列中時,預設會調用main方法。Apple提供了NSOperation這個類,提供了一個優秀的多線程編程方法;一個NSOperationQueue操作隊列,相當於一個線程管理器,而非一個線程,因為你可以設定這個線程管理器內可以並行啟動並執行線程數量等。GCD(Grand Central Dispatch)宏大的中央調度,串列隊列、並發隊列、主線程隊列;同步和非同步:同步指第一個任務不執行完,不會開始第二個,非同步是不管第一個有沒有執行完,都開始第二個。串列和並行:串列是多個任務按一定順序執行,並行是多個任務同時執行;代碼是在分線程執行,在主線程嘟列中重新整理UI。多線程編程是防止主線程堵塞、增加運行效率的最佳方法。多線程是一個比較輕量級的方法來實現單個應用程式內多個代碼執行路徑。

TCP和UDP的區別於聯絡

TCP為傳輸控制層協議,為連線導向、可靠的、點到點的通訊;UDP為使用者資料包通訊協定,非串連的不可靠的點到多點的通訊;TCP側重可靠傳輸,UDP側重快速傳輸。

TCP串連的三向交握

第一次握手:用戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包,即SYN+ACK包,此時伺服器進入SYN+RECV狀態;第三向交握:用戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此發送完畢,用戶端和伺服器進入ESTABLISHED狀態,完成三次狀態。

Scoket串連和HTTP串連的區別

HTTP協議是基於TCP串連的,是應用程式層協議,主要解決如何封裝資料。Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面(API),通過Socket,我們才能使用TCP/IP協議。HTTP串連:短串連,用戶端向伺服器發送一次請求,伺服器響應後串連斷開,節省資源。伺服器不能主動給用戶端響應(除非採用HTTP長串連技術),iPhone主要使用類NSURLConnection。Socket串連:長串連,用戶端跟伺服器端直接使用Socket進行串連,沒有規定串連後斷開,因此用戶端和伺服器段保持串連通道,雙方可以主動發送資料,一般多用於遊戲.Socket預設連線逾時時間是30秒,預設大小是8K(理解為一個資料包大小)。

HTTP協議的特點,關於HTTP請求GET和POST的區別

GET和POST的區別:HTTP超文字傳輸通訊協定 (HTTP),是短串連,是用戶端主動發送請求,伺服器做出響應,伺服器響應之後,連結斷開。HTTP是一個屬於應用程式層物件導向的協議,HTTP有兩類報文:請求報文和響應報文。HTTP請求報文:一個HTTP請求報文由請求行、要求標頭部、空行和請求資料4部分組成。HTTP響應報文:由三部分組成:狀態行、訊息前序、響應本文。GET請求:參數在地址後拼接,沒有請求資料,不安全(因為所有參數都拼接在地址後面),不適合傳輸大量資料(長度有限制,為1024個位元組)。GET提交、請求的資料會附在URL之後,即把資料放置在HTTP協議頭中。以?分割URL和傳輸資料,多個參數用&串連。如果資料是英文字母或數字,原樣發送,如果是空格,轉換為+,如果是中文/其他字元,則直接把字串用BASE64加密。POST請求:參數在請求資料區放著,相對GET請求更安全,並且資料大小沒有限制。把提交的資料放置在HTTP包的包體中.GET提交的資料會在地址欄顯示出來,而POST提交,地址欄不會改變。傳輸資料的大小:GET提交時,傳輸資料就會受到URL長度限制,POST由於不是通過URL傳值,理論上書不受限。安全性:POST的安全性要比GET的安全性高;通過GET提交資料,使用者名稱和密碼將明文出現在URL上,比如登陸介面有可能被瀏覽器緩衝。HTTPS:安全超文字傳輸通訊協定 (HTTPS)(Secure Hypertext Transfer Protocol),它是一個安全通訊通道,基於HTTP開發,用於客戶電腦和伺服器之間交換資訊,使用安全套結字層(SSI)進行資訊交換,即HTTP的安全版。

XML資料解析方式各有什麼不同?

XML資料解析的兩種解析方式:DOM解析和SAX解析;DOM解析必須完成DOM樹的構造,在處理規模較大的XML文檔時就很耗記憶體,佔用資源較多,讀入整個XML文檔並構建一個駐留記憶體的樹結構(節點樹),通過遍曆樹結構可以檢索任意XML節點,讀取它的屬性和值,通常情況下,可以藉助XPath查詢XML節點;SAX與DOM不同,它是事件驅動模型,解析XML文檔時每遇到一個開始或者結束標籤、屬性或者一條指令時,程式就產生一個事件進行相應的處理,一邊讀取XML文檔一邊處理,不必等整個文檔載入完才採取措施,當在讀取解析過程中遇到需要處理的對象,會發出通知進行處理。因此,SAX相對於DOM來說更適合操作大的XML文檔。JSON解析:效能比較好的主要是第三方的JSONKIT和iOS內建的JSON解析類,其中內建的JSON解析效能最高。

如何進行真機調試?

xcode7可免費直接測試xcode7之前{1.首先需要用鑰匙串建立一個鑰匙(key);2.將鑰匙串上傳到官網,擷取iOS Development認證;3.建立App ID即我們應用程式中的Boundle ID;4.添加Device ID即UDID;5.通過勾選前面所建立的認證:App ID、Device ID;6.產生mobileprovision檔案;7.先決條件:申請開發人員帳號 99美刀}

APP發布的上架流程

1.登入應用發布網站添加應用資訊;2.下載安裝發布認證;3.選擇發布認證,使用Archive編譯發布包,用Xcode將代碼(發布包)上傳到伺服器;4.等待審核通過;5.產生IPA:功能表列->Product->Archive.

對沙箱的理解

每個iOS應用都被限制在“沙箱”中,沙箱相當於一個加了僅主人可見許可權的檔案夾,及時在應用程式安裝過程中,系統為每個單獨的應用程式產生它的主目錄和一些關鍵的子目錄。蘋果對沙箱有幾條限制:1.應用程式在自己的沙箱中運作,但是不能訪問任何其他應用程式的沙箱;2.應用之間不能共用資料,沙箱裡的檔案不能被複製到其他應用程式的檔案夾中,也不能把其他應用檔案夾複製到沙箱中;3.蘋果禁止任何讀寫沙箱以外的檔案,禁止應用程式將內容寫到沙箱以外的檔案夾中;4.沙箱目錄裡有三個檔案夾:Documents——儲存;應用程式的資料檔案,儲存使用者資料或其他定期備份的資訊;Library下有兩個檔案夾,Caches儲存應用程式再次啟動所需的資訊,Preferences包含應用程式的喜好設定檔案,不可在這更改喜好設定;temp存放臨時檔案即應用程式再次啟動不需要的檔案。擷取沙箱根目錄的方法,有幾種方法:用NSHomeDirectory擷取。擷取Document路徑:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES).

ViewController 的 loadView、viewDidLoad、viewDidUnload 分別是在什麼時候調用的?

viewDidLoad在view從nib檔案初始化時調用,loadView在controller的view為nil時調用。此方法在編程實現view時調用,view控制器預設會註冊memory warning notification,當view controller的任何view沒有用的時候,viewDidUnload會被調用,在這裡實現將retain的view release,如果是retain的IBOutlet view 屬性則不要在這裡release,IBOutlet會負責release 。

iOS 核心架構

CoreAnimationCoreGraphicsCoreLocationAVFoundationFoundation

iOS核心機制

UITableView 重用ObjC記憶體管理;自動釋放池,ARC如何?runloopruntimeBlock的定義、特性、記憶體地區、如何?Responder ChainNSOperationGCD

資料結構

8大排序演算法二叉樹實現二分尋找實現

物件導向編程

封裝、繼承、多態設計模式6個原則設計一個類的功能,如何劃分粒度(單一職責)介面隔離。如果有一個鳥類,有飛的動作,一個鴕鳥繼承它是合適的嗎(裡氏替換)類之間的依賴如何依賴偶合度最小(依賴倒轉)高層依賴低層,低層不能依賴高層。依賴介面,不能依賴具體的類。如果A要調用C函數,但C是B的成員類,應該如何設計?(迪米特)如何設計類,能做到只增加代碼,而不修改代碼,有哪些經驗(開放封閉)通過設計模式解決。

電腦技術

電腦網路: TCP/IP、HTTPCDN、SPDY電腦安全: RSA、AES、DES作業系統:線程、進程、堆棧、死結、調度演算法

iOS新特性、新技術

iOS7 UIDynamic、SpritKit、新布局、扁平化iOS8 應用程式擴充、HealthKit、SceneKit、CoreLocation、TouchID、PhotoKitiOS9Apple Watch第三方庫:SDWebImage、AFNetwork、JSONKit、waxswift

iOS之面試題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.