天天看點

IOS平台開發測試人員面試題系列

  1. object-c的類可以多重繼承麼?可以實作多個接口麼?category是什麼?重寫一個類的方式用繼承好還是分類好?為什麼?

  object-c的類不可以多重繼承;可以實作多個接口,通過實作多個接口可以完成c++的多重繼承;category是類别,一般情況用分類好,用category去重寫類的方法,僅對本category有效,不會影響到其他類與原有類的關系。

  2.#import 跟#include 又什麼差別,@class呢, #import<> 跟 #import”"又什麼差別?

  #import 是objective-c導入頭檔案的關鍵字,#include是c/c++導入頭檔案的關鍵字,使用#import頭檔案會自動隻導入一次,不會重複導 入,相當于#include和#pragma once;@class告訴編譯器某個類的聲明,當執行時,才去檢視類的實作檔案,可以解決頭檔案的互相包含;#import<>用來包含系 統的頭檔案,#import””用來包含使用者頭檔案。

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

  readwrite 是可讀可寫特性;需要生成getter方法和setter方法時

  readonly 是隻讀特性  隻會生成getter方法 不會生成setter方法 ;不希望屬性在類外改變

  assign 是指派特性,setter方法将傳入參數指派給執行個體變量;僅設定變量時;

  retain 表示持有特性,setter方法将傳入參數先保留,再指派,傳入參數的retaincount會+1;

  copy 表示指派特性,setter方法将傳入對象複制一份;需要完全一份新的變量時。

  nonatomic 非原子操作,決定編譯器生成的setter getter是否是原子操作,atomic表示多線程安全,一般使用nonatomic

  4.寫一個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 = t;

  5.對于語句nsstring*obj = [[nsdata alloc] init]; obj在編譯時和運作時分别時什麼類型的對象?

  編譯時是nsstring的類型;運作時是nsdata類型的對象

  6.常見的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。

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

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

  8.objective-c如何對記憶體管理的,說說你的看法和解決方法?

  objective-c的記憶體管理主要有三種方式arc(自動記憶體計數)、手動記憶體計數、記憶體池。

 9.記憶體管理的幾條原則時什麼?按照預設法則.那些關鍵字生成的對象

  需要手動釋放?在和property結合的時候怎樣有效的避免記憶體洩露?

  誰申請,誰釋放

  遵循cocoa touch的使用原則;

  記憶體管理主要要避免“過早釋放”和“記憶體洩漏”,對于“過早釋放”需要注意@property設定特性時,一定要用對特性關鍵字,對于“記憶體洩漏”,一定要申請了要負責釋放,要細心。

  關鍵字alloc 或new 生成的對象需要手動釋放;

  設定正确的property屬性,對于retain需要在合适的地方釋放,

  10.如何對ios裝置進行性能測試?

  profile-> instruments ->time profiler

  11.看下面的程式,第一個nslog會輸出什麼?這時str的retaincount是多少?第二個和第三個呢? 為什麼?

=======================================================

nsmutablearray* ary = [[nsmutablearray array] retain];

nsstring *str = [nsstring stringwithformat:@"test"];

[strretain];

[aryaddobject:str];

nslog(@"%@%d",str,[str retaincount]);

[strrelease];

[aryremoveallobjects];

最新内容請見作者的github頁:http://qaseven.github.io/

繼續閱讀