周四去面試了XX公司iOS程式員,費了半天勁才找到地方,居然在一個破賓館裡面,一間小房子,3對辦公桌拼起來的辦公室,
一看到此情此景,我心頓時都涼了半截。房子裡面熱得要命,我坐那才一會,後背都濕了。
管事的拿了份面試題給我做,我做的時候感覺挺簡單,不過後來查資料,好像有些地方還是不太對。題目如下:
1:Object-c有多重繼承嗎?沒有的話有什麼替代?
我的回答:沒有。用protocol代替
網上答案:cocoa中的所有類都是NSObject的子類。多繼承在這裡是用protocol委託代理來實現的
2:static作用?
我的答案:靜態聲明。聲明一個變數或方法為靜態。靜態變數在類的第一次執行個體化時,即分配儲存空間。靜態方法不需要類的執行個體即可訪問。
網上答案:
(1)函數體內static變數的作用範圍為該函數體,不同於auto變數,該變數的記憶體只被分配一次,因此此值在下次調用時扔維持上次的值。
(2)在模組內的static全域變數可以被模組內所用的函數訪問,但不能被模組外其他函數訪問
(3)在模組內的static函數只可被這一模組內的其他函數調用,這個函數的使用範圍被限制在聲明它的模組內
(4)在類中的static成員變數屬於整個類所擁有,對類的所有對象只有一份拷貝
(5)在類中的static成員函數屬於整個類所擁有,這個函數不接收this指標,因而只能訪問類的static成員變數
3:#import和#include的區別。@class代表什嗎?
我的答案:區別在於#include可以避免循環參考的問題。@class代表的是其標識的是一個類,它在.m檔案中#import。
網上答案:@class一般用於標頭檔中需要聲明該類的某個執行個體變數的時候用到,在m檔案中還是需要#import。
而#import比#include的好處就是不會引起交叉編譯
4:Object-c的記憶體管理是如何管理的?
我的答案:
引用計數:當使用alloc建立新執行個體或賦值retain、copy(或ARC中的strong)標識的變數時,執行個體或變數的引用計數即加一,當它們的引用計數為0時,則由GC回收
網上答案:如果你通過分配和初始化,(比如[[MyClass alloc] init])的方式類建立對象,你就擁有這個對象,需要負責該對象的釋放。這個規則在使用NSObject的便利方法new時也同樣適用。如果你拷貝一個對象,你也擁有拷貝得到的對象,需要負責該對象的釋放。如果你保持一個對象,你就部分擁有這個對象,需要在不再需要時釋放
5:view中的frame和bounds有什麼不同?
我的答案:view的frame代表的是父類中的view的位置。view的bounds代表的是view自己的座標及長寬
網上答案:
frame指的是:該view在父view座標系統中的位置和大小。(參照點是父親的座標系統)
bounds指的是:該view在本身座標系統中 的位置和大小。(參照點是本身座標系統)
6:如何在ios4.1以上使用ios3的代碼(這個問題不太明白具體什麼意思,按我的理解回答了)?
我的答案:在ARC項目中使用非ARC的代碼,需要在編譯設定裡設定:-fno-objc-arc
7:請寫一個委託代理的例子
.h檔案
@protocol delegate;@required- (void)dosomething;@end@interface DelegateSimple<delegate>@end
.m檔案
#import "DelegateSimple.h"@implementation DelegateSimple- (void)dosomething{ NSLog(@"%@","This is implementation of the protocol");}@end
8:請用block寫出一個Singleton執行個體
+(Class *)sharedInstance{ static Class *__singleton; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ __singleton = [[Class alloc] init]; }); return __singleton;}
9:請寫出你常用的多線程調用的方法
-(void)downloadStringFromURL{ NSURL *url = [NSURL URLWithString:[NSString stringWithFormart:@"%@", "www.xxxx.com"]]; ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url]; [request setDelegate:self]; [request startAsynchronous];}#pragma mark - ASIHTTPRequest非同步請求回調方法- (void)requestFinished:(ASIHTTPRequest *)request{ NSString *responseString = [request responseString]; NSLog(@"%@", responseString);}- (void)requestFailed{ NSError *error = [request error]; NSLog(@"%@", error);}
做完之後,辦公室裡又沒有能做主的人,然後打電話給某某在正南京出差的汪總,跟他又聊了半天,看他好像聊得挺來勁,因為他在地鐵裡,訊號不好,中途還斷過一次電話。最後他問我薪資,我覺得這辦公環境太差了點,就故意說高了點,他沉默了一會,讓我回去等訊息。