你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS面試系列5

iOS面試系列5

編輯:IOS開發綜合

1.#import 跟#include、@class有什麼區別?#import<>跟 #import”"又什麼區別?

1> #import和#include都能完整地包含某個文件的內容,#import能防止同一個文件被包含多次?

2> @class僅僅是聲明一個類名,並不會包含類的完聲明;@class還能解決循環包含的問題

3> #import <> 用來包含系統自帶的文件,#import “”用來包含自定義的文件

 

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

1> readwrite:同時生成get方法和set方法的聲明和實現

2> readonly:只生成get方法的聲明和實現

3> assign:set方法的實現是直接賦值,用於基本數據類型

4> retain:set方法的實現是release舊值,retain新值,用於OC對象類型

5> copy:set方法的實現是release舊值,copy新值,用於NSString、block等類型

6> nonatomic:非原子性,set方法的實現不加鎖(比atomic性能高)

 

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

1> @property (nonatomic, retain) NSString *name;

- (void)setName:(NSString *)name

{

if(_name != name) {

[_namerelease];

_name= [name retain];

}

}

2> @property(nonatomic, copy) NSString *name;

- (void)setName:(NSString *)name

{

if(_name != name) {

[_namerelease];

_name= [name copy];

}

}

4.對於語句NSString*obj = [[NSData alloc] init]; ,編譯時和運行時obj分別是什麼類型?

1> 編譯時是NSString類型

2> 運行時是NSData類型

 

5.常見的object-c的數據類型有那些,和C的基本數據類型有什麼區別?

1>常用OC類型:NSString、NSArray、NSDictionary、NSData、NSNumber等

2>OC對象需要手動管理內存,C的基本數據類型不需要管理內存

 

6.id 聲明的變量有什麼特性?

id聲明的變量能指向任何OC對象

 

7.Objective-C如何對內存管理的,說說你的看法和解決方法?

1>每個對象都有一個引用計數器,每個新對象的計數器是1,當對象的計數器減為0時,就會被銷毀

2>通過retain可以讓對象的計數器+1、release可以讓對象的計數器-1

3>還可以通過autorelease pool管理內存

4>如果用ARC,編譯器會自動生成管理內存的代碼

 

8.內存管理的幾條原則時什麼?按照默認法則.哪些方法生成的對象需要手動釋放?在和property結合的時候怎樣有效的避免內存洩露?

1> 只要調用了alloc、copy、new方法產生了一個新對象,都必須在最後調用一次release或者autorelease

2> 只要調用了retain,都必須在最後調用一次release或者autorelease

3> @property如果用了copy或者retian,就需要對不再使用的屬性做一次release操作

4> 如果用了ARC,另外討論

 

9.看下面的程序,三次NSLog會輸出什麼?為什麼?

NSMutableArray*ary=[[NSMutableArrayarray]retain];

NSString*str=[NSStringstringWithFormat:@"test"];// 1

[str retain];// 2

[ary addObject:str]; // 3

NSLog(@"%d", [strretainCount]);

[str retain];//4

[str release];// 3

[str release];// 2

NSLog(@"%d", [strretainCount]);

[ary removeAllObjects];// 1

NSLog(@"%d", [strretainCount]);

結果:3、2、1

 

 

10.OC中創建線程的方法是什麼?如果指定在主線程中執行代碼?如何延時執行代碼?

1>創建線程的方法

? NSThread

? NSOperationQueue和NSOperation

? GCD

2>主線程中執行代碼

? [self performSelectorOnMainThread: withObject: waitUntilDone:];

? [self performSelector: onThread:[NSThread mainThread] withObject:waitUntilDone:];

? dispatch_async(dispatch_get_main_queue(), ^{

});

3>延時執行

? double delayInSeconds = 2.0;

dispatch_time_t popTime =dispatch_time(DISPATCH_TIME_NOW,

(int64_t)(delayInSeconds * NSEC_PER_SEC));

dispatch_after(popTime,dispatch_get_main_queue(), ^(void){

});

? [self performSelector: withObject: afterDelay:];

? [NSTimer scheduledTimerWithTimeInterval: target: selector: userInfo:repeats:];

 

 

 

警告:一定要把英文題目過一遍,有些公司的題目故意弄成英文的!!!

1.Difference between shallow copyand deep copy?

1>淺拷貝:指針(地址)拷貝,不會產生新對象

2>深拷貝:內容拷貝,會產生新對象

 

2.What is advantage ofcategories? What is difference between implementing a category and inheritance?

1>分類可以在不修改原來類模型的基礎上拓充方法

2>分類只能擴充方法、不能擴充成員變量;繼承可以擴充方法和成員變量

3>繼承會產生新的類

 

3.Difference between categoriesand extensions??

1>分類是有名稱的,類擴展沒有名稱

2>分類只能擴充方法、不能擴充成員變量;類擴展可以擴充方法和成員變量

3>類擴展一般就寫在.m文件中,用來擴充私有的方法和成員變量(屬性)

 

4.Difference between protocol inobjective c and interfaces in java??

1> Java的接口中聲明的方法必須都實現

2> Oc的protocol中聲明的方法並不一定要實現

 

5.What are KVO and KVC?

1> KVC是鍵值編碼,可以通過一個字符串的key(屬性名)修改對象的屬性值

2> KVO是鍵值監聽,可以監聽一個對象屬性值的改變

 

6.What is purpose of delegates??

1>兩個對象之間傳遞數據和消息

2>解耦,拆分業務邏輯

 

7.What are mutable and immutabletypes in Objective C??

1> mutable是可變類型,比如NSMutableArray,可以動態往裡面添加元素

2> immutable是不可變類型,比如NSArray,固定的存儲空間,不能添加元素

 

8.When we call objective c isruntime language what does it mean??

1>動態綁定:對象類型在運行時才真正確定

2>多態性

 

9.what is difference betweenNSNotification and protocol??

1>通過NSNotification可以給多個對象傳遞數據和消息

2>通過protocol(代理模式)只能給一個對象傳遞數據和消息

 

10.What is push notification?

1>本地推送:程序內部彈出通知到用戶設備

2>遠程推送:由推送服務器推送通知到用戶設備

 

11.What is Polymorphism??

多態:父類指針指向子類對象

 

12.What is Singleton??

單粒:保證程序運行過程中,永遠只有一個對象實例

目的是:全局共享一份資源、節省不必要的內存開銷

 

13.What is responder chain??

響應者鏈:

l UIResponder有一個nextResponder屬性,通過該屬性可以組成一個響應者鏈,事件或消息在其路徑上進行傳遞

l 如果UIResponder沒有處理傳給它的事件,會將未處理的消息轉發給自己的nextResponder

 

14.Difference between frame andbounds??

1> frame以父控件的左上角為坐標原點

2> bounds以控件本身的左上角為坐標原點

 

15.Difference between method andselector??

通過一個selector可以找到方法地址,進而調用一個方法

 

16.Is there any garbage collectionmechanism in Objective C.??

1> OC 1.0沒有垃圾回收

2> OC 2.0有垃圾回收,只能用在Mac上

3> iOS中有ARC機制,是編譯器特性,垃圾回收是運行時特性

 

17.What is NSOperation queue??

1>用來存放NSOperation對象的隊列,可以用來異步執行一些操作

2>一般可以用在網絡請求等耗時操作

 

18.What is lazy loading??

延遲加載:比如控制器的view,在第一次用到view時才會調用loadView方法進行創建

19.Can we use two tableviewcontrollers on one viewcontroller?

從技術角度上分析,一個控制器內部添加2個表格控制器是沒有問題的

 

20.Can we use one tableview withtwo different datasources? How you will achieve this???

從對象屬性上分析,tableView只有一個dataSource屬性。當然,真要使用2個不同的數據源,還是有其他辦法解決的

 

 

 

1.When to use NSMutableArray andwhen to use NSArray?

 

1>當數組元素需要動態地添加或者刪除時,用NSMutableArray

2>當數組元素固定不變時,用NSArray

 

2.Give us example of what are delegate methods andwhat are data source methods of uitableview.

1>代理方法:返回tableView每行的高度、監聽tableView每行的選中

2>數據源方法:返回tableView數據的組數和行數、每行顯示什麼數據

 

3.How manyautorelease you can create in your application? Is there any limit?

沒有限制

 

4.If we don’tcreate any autorelease pool in our application then is there any autoreleasepool already provided to us?

系統會默認會不定時地創建和銷毀自動釋放池

 

5.When you willcreate an autorelease pool in your application?

當需要精確地控制對象的釋放時間時,需要手動創建自動釋放池

 

6.When retaincount increase?

當做一次retain或者copy操作,都有可能增加計數器

 

7. What are commonly used NSObject class methods?

NSObject常見的類方法有:alloc、new、description等

8.What isconvenience constructor?

像NSStirng的stringWithFormat,NSNumber的numberWithInt

 

9.How to designuniversal application in Xcode?

1> 創建項目時,Device選擇Universal

2> 可以創建一套痛用的數據模型

3> 根據iPhone\iPad選擇不同的控制器(iPad可能用UISplitViewController)

4> 根據iPhone\iPad選擇不同的界面

 

10. What is keyword atomic in Objective C?

1> atomic是原子性

2> atomic會對set方法的實現進行加鎖

 

11. What are UIView animations?

UIView封裝的核心動畫可以通過類方法\block實現

 

12. How can you store data in iPhone applications?

1>屬性列表

2>Preference(NSUserDefaults)

3>鍵值歸檔(NSKeyedArchiver、NSCoding)

4>SQLite數據庫

5>Core Data

 

13. What is NSManagedObject model?

NSManagedObject是Core Data中的實體對象

 

14. What is predicate?

謂詞:可以以一定條件來過濾數組、字典等集合數據,也能用在Core Data的數據查詢中


 

1.Object-C有多繼承嗎?沒有的話用什麼代替??

 

1> OC是單繼承,沒有多繼承

2> 有時可以用分類和協議來代替多繼承

 

2.Object-C有私有方法嗎?私有變量呢??

1> OC沒有類似@private的修飾詞來修飾方法,只要寫在.h文件中,就是公共方法

2> 可以直接在.m文件中(比如類擴展)聲明和實現方法,對編譯器來說是私有的

 

3.關鍵字const什麼含義?

const int a;

int const a;

const int *a;

int const *a;

int * const a;

int const * const a;

1> 前兩個的作用是一樣:a 是一個常整型數

2> 第三、四個意味著 a 是一個指向常整型數的指針(整型數是不可修改的,但指針可以)

3> 第五個的意思:a 是一個指向整型數的常指針(指針指向的整型數是可以修改的,但指針是不可修改的)

4> 最後一個意味著:a 是一個指向常整型數的常指針(指針指向的整型數是不可修改的,同時指針也是不可修改的)

 

4.static的作用?

1> static修飾的函數是一個內部函數,只能在本文件中調用,其他文件不能調用

2> static修飾的全部變量是一個內部變量,只能在本文件中使用,其他文件不能使用

3> static修飾的局部變量只會初始化一次,並且在程序退出時才會回收內存

 

5.線程和進程的區別?

1>一個應用程序對應一個進程,一個進程幫助程序占據一塊存儲空間

2>要想在進程中執行任務,就必須開啟線程,一條線程就代表一個任務

3>一個進程中允許開啟多條線程,也就是同時執行多個任務

6.堆和棧的區別??

1>堆空間的內存是動態分配的,一般存放對象,並且需要手動釋放內存

2>棧空間的內存由系統自動分配,一般存放局部變量等,不需要手動管理內存

 

7.為什麼很多內置的類,如TableView的delegate的屬性是assign不是retain??

1> tableView的代理一般都是它所屬的控制器,控制器會對它內部的view做一次retain操作

2> 假設tableView也對代理(控制器)做一次retain操作,那麼就出現循環retain問題

 

8.定義屬性時,什麼情況使用copy、assign、retain??

1> copy:NSString、Block等類型

2> assign:基本數據類型

3> retain:OC對象類型

 

9.對象是什麼時候被釋放的??

每個對象都有一個引用計數器,每個新對象的計數器是1,當對象的計數器減為0時,就會被銷毀

 

10.tableView的重用機制??

這裡只是簡述:將離開屏幕的cell放到緩存池,重新拿來顯示到屏幕的其他位置(其他自己詳細描述)

 

11.ViewController 的loadView、viewDidLoad、viewDidUnload分別是什麼時候調用的,在自定義ViewCointroller時在這幾個函數中應該做什麼工作?

1> loadView

? 當第一次使用控制器的view時,會調用loadView方法創建view

? 一般在這裡自定義view

 

2> viewDidLoad

? 當控制器的view創建完畢時會調用,也就是在loadView後調用

? 一般在這裡添加子控件、初始化數據

 

3> viewDidUnload

? 當控制器的view因為內存警告被銷毀時調用

? 一般在這裡回收跟界面相關的資源(界面都會銷毀了,跟界面相關的資源肯定不要了)

 

12.ViewController的didReceiveMemoryWarning是在什麼時候調用的?默認的操作是什麼??

? 當應用程序接收到系統的內容警告時,就有可能調用控制器的didRece…Warning方法

? 它的默認做法是:

l 當控制器的view不在窗口上顯示時,就會直接銷毀,並且調用viewDidUnload方法

 

13.怎麼理解MVC,在Cocoa中MVC是怎麼實現的??

1> M:Model,模型,封裝數據

2> V:View,視圖界面,負責展示數據

3> C:Controller,控制器,負責提供數據(Model)給界面(View)

 

14.self.跟self->什麼區別??

1> self.是調用get方法或者set放

2> self是當前本身,是一個指向當前對象的指針

3> self->是直接訪問成員變量

 

15.id、nil代表什麼?

1> id類型的指針可以指向任何OC對象

2> nil代表空值(空指針的值)

 

16. 如何對iOS設備進行性能測試?

Timer Profile



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