qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

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

           隨著iOS平臺開發的職位的增加,筆試、面試也越來越有“套路”,這里我總結了一些面試題,多數是Objective-C的基礎知識,適合于面試新人,答案是我自己答的,不準確的地方,歡迎指出。
            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 release];
          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]);
          [strretain];
          [strrelease];
          [strrelease];
          NSLog(@"%@%d",str,[str retainCount]);
          [aryremoveAllObjects];
          NSLog(@"%@%d",str,[str retainCount]);
          =======================================================

          posted on 2014-08-05 09:34 順其自然EVO 閱讀(249) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄android

          <2014年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 连江县| 来凤县| 海城市| 连州市| 通海县| 宁阳县| 玉溪市| 荥阳市| 原平市| 宜春市| 德兴市| 板桥市| 石林| 铜鼓县| 封丘县| 莱阳市| 丹江口市| 当雄县| 潮州市| 德保县| 临清市| 来安县| 迁西县| 乳源| 房山区| 三原县| 仁化县| 英山县| 桦川县| 浮山县| 南岸区| 黄山市| 曲阳县| 义马市| 长海县| 上饶市| 邛崃市| 涞水县| 浦东新区| 资源县| 毕节市|