轉(zhuǎn)載:25個(gè) iOS 面試題整理(帶答案)二

25個(gè) iOS 面試題整理(帶答案)二

1.回答person的retainCount值,并解釋為什么
Person * per = [[Person alloc] init];
self.person = per;

2.這段代碼有什么問(wèn)題嗎:
@implementation Person

  • (void)setAge:(int)newAge {
    self.age = newAge;
    }
    @end

正確寫(xiě)法
{
if(_age){
[_age release];
}
_age = [newAge retain];

}
死循環(huán)(擴(kuò)展:知道如何正確寫(xiě)setter和getter方法)

3.這段代碼有什么問(wèn)題,如何修改
for (int i = 0; i < someLargeNumber; i++) {
NSString *string = @”Abc”;//常量區(qū)
string = [string lowercaseString];//新的堆區(qū)
string = [string stringByAppendingString:@"xyz"];//新的堆區(qū)
NSLog(@“%@”, string);
}
在for循環(huán)里添加自動(dòng)釋放池(擴(kuò)展:常量區(qū)的retaincount是怎么個(gè)情況)

4.截取字符串”20 | http://www.baidu.com”中,”|”字符前面和后面的數(shù)據(jù),分別輸出它們。
componentsSeparatedByString
NSString * str = @“20|http://www.baidu.com”;
for(NSString*s in [str componentsSeparatedByString]){
NSLog(@“%@“,s);
}

5.用obj-c寫(xiě)一個(gè)冒泡排序
1
2
3
4
5
6
7
8

for
(int i = 0, i < arr.count - 1,i++){

for
(int j = 0,j < arr.count - 1 - i;j++){

int a = [[arr objectAtIndex:j]intValue];

int b=[[arr objectAtIndex:j+1]intValue];

if
(a < b){

[arr replaceObjectAtIndex:j withObject:[NSString stringWithFormat:@“%d”,b]];

[arr replaceObjectAtIndex:j+1 withObject:[NSString stringWithFormat:@“%d”,a];

}}}

6.簡(jiǎn)述你對(duì)UIView、UIWindow和CALayer的理解
http://blog.csdn.net/kuqideyupian/article/details/7731942
http://o0o0o0o.iteye.com/blog/1728599

7.寫(xiě)一個(gè)完整的代理,包括聲明,實(shí)現(xiàn)
注意手寫(xiě)的準(zhǔn)確性

8.分析json、xml的區(qū)別?json、xml解析方式的底層是如何處理的?
http://www.open-open.com/bbs/view/1324367918671
http://hi.baidu.com/fevelen/item/a25253ab76f766756cd455b6

9.ViewController 的 didReceiveMemoryWarning 是在什么時(shí)候被調(diào)用的?默認(rèn)的操作是什么?
http://blog.sina.com.cn/s/blog_68661bd80101nn6p.html

10.面向?qū)ο蟮娜筇卣鳎⒆骱?jiǎn)單的介紹
封裝、繼承、多態(tài)
多態(tài):父類(lèi)指針指向子類(lèi)對(duì)象。兩種表現(xiàn)形式:重寫(xiě)(父子類(lèi)之間)和重載(本類(lèi)中)
OC的多態(tài)體現(xiàn)是:重寫(xiě),沒(méi)有重載這種表現(xiàn)形式

舉例說(shuō)明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

@interface Parent : NSObject
//父類(lèi)

  • (void)simpleCall;

@end

@interface Child_A : Parent
//子類(lèi) Child_A

@end

@implementation Child_A

  • (void)simpleCall

{

NSLog(@
"我是Child_A的simpleCall方法"
);

}

@end

@interface Child_B : Parent
//子類(lèi)Child_B

@end

  • (void)simpleCall

{

NSLog(@
"我是Child_的simpleCall方法"
);

}

@end

然后,我們就可以看到多態(tài)所展示的特性了:
1
2
3
4

Parent * pa=[[Child_A alloc] init];
// 父類(lèi)指針指向子類(lèi)Child_A對(duì)象

Parent * pb=[[Child_B alloc] init];
//父類(lèi)指針指向子類(lèi)Child_B對(duì)象

[pa simpleCall];
// 顯然是調(diào)用Child_A的方法

[pb simpleCall];
// 顯然是調(diào)用Child_B的方法

在OC中??匆?jiàn)的多態(tài)體現(xiàn):
1
2
3
4
5
6

  • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

static NSString *CellWithIdentifier = @
"Cell"
;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellWithIdentifier];

return
cell;

}

(UITableViewCell *)指向cell子類(lèi)對(duì)象

11.重寫(xiě)一個(gè)NSString類(lèi)型的,retain方式聲明name屬性的setter和getter方法
1
2
3
4
5
6
7
8

-(void)settetName:(NSString *)name{

if
(_name){

[_name release];

}

_name = [name retain];

}

-(NSString *)getterName{

return
[[_name retain]autorelease];

12.簡(jiǎn)述NotificationCenter、KVC、KVO、Delegate?并說(shuō)明它們之間的區(qū)別?
http://blog.csdn.net/zuoerjin/article/details/7858488
http://blog.sina.com.cn/s/blog_bf9843bf0101j5px.html

13.What is lazy loading?
懶漢模式,只在用到的時(shí)候才去初始化。也可以理解成延時(shí)加載。我覺(jué)得最好也最簡(jiǎn)單的一個(gè)列子就是tableView中圖片的加載顯示了。一個(gè)延時(shí)載,避免內(nèi)存過(guò)高,一個(gè)異步加載,避免線程堵塞

14.什么是Protocol?什么是代理?寫(xiě)一個(gè)委托的interface?委托的property聲明用什么屬性?為什么?
委托的property聲明用什么屬性是assign(防止循環(huán)引用)

15.分別描述類(lèi)別(categories)和延展(extensions)是什么?以及兩者的區(qū)別?繼承和類(lèi)別在實(shí)現(xiàn)中有何區(qū)別?為什么Category只能為對(duì)象添加方法,卻不能添加成員變量?
考慮類(lèi)目比繼承的優(yōu)點(diǎn)
類(lèi)別是把類(lèi)的實(shí)現(xiàn)方法分散到不同的文件中 也可以給類(lèi)擴(kuò)展新方法
延展是給類(lèi)添加私有方法 只為自己類(lèi)所見(jiàn) 所使用
繼承可以擴(kuò)展實(shí)例變量 而類(lèi)別不能
類(lèi)別如果可以添加成員變量 就跟繼承沒(méi)什么兩樣了 而且在上線的項(xiàng)目更新中 用類(lèi)別筆繼承更能維護(hù)項(xiàng)目的穩(wěn)定性

16.Objective-C有私有方法么?私有變量呢?如多沒(méi)有的話(huà),有沒(méi)有什么代替的方法?
oc沒(méi)有私有方法 但是有私有變量@property 私有方法可以用延展代替

17.#import、#include和@class有什么區(qū)別

import 系統(tǒng)文件、自定義文件引用 不用擔(dān)心重復(fù)引用的問(wèn)題

include 跟#import幾乎一樣 但是他需要注意不能重復(fù)引用

@class 只是告訴系統(tǒng)有這個(gè)類(lèi) 但是如果在實(shí)現(xiàn)類(lèi)中用到這個(gè)類(lèi) 需要重新用#import導(dǎo)入該類(lèi)頭文件

18.談?wù)勀銓?duì)MVC的理解?為什么要用MVC?在Cocoa中MVC是怎么實(shí)現(xiàn)的?你還熟悉其他的OC設(shè)計(jì)模式或別的設(shè)計(jì)模式嗎?
mvc - model view controller 避免了view與model 的強(qiáng)耦合 使代碼更靈活 更容易維護(hù) 可復(fù)用 可擴(kuò)展 oc其他設(shè)計(jì)模式有Notification 。target;action. singleton delegate

19.如監(jiān)測(cè)系統(tǒng)鍵盤(pán)的彈出
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector( ) name:UIKeyboardWillShowNotification object:nil];
擴(kuò)展:ios 彈出鍵盤(pán)擋住UITextView的解決方式

20.舉出5個(gè)以上你所熟悉的ios sdk庫(kù)有哪些和第三方庫(kù)有哪些?
AFWorking/WebKit/SQLite/Core Data/Address Book

21.如何將產(chǎn)品進(jìn)行多語(yǔ)言發(fā)布?
http://fengmm521.blog.163.com/blog/static/25091358201291645852889/

22.如何將敏感字變成**
1
2
3
4
5

search = @
"某某某"
;

replace = @“***”;

range = [mstr rangeOfString:search];

[mstr replaceCharactersInRange:range withString:replace];

NSLog(@
"%@"
,mstr);

23.objc中的減號(hào)與加號(hào)代表什么?
類(lèi)方法
24.單例目的是什么,并寫(xiě)出一個(gè)?
避免重復(fù)創(chuàng)建 節(jié)省內(nèi)存空間
1
2
3
4
5
6
7
8

static Model * model;

+(id)singleton{

if
(!model){

@synchronized(self){

model = [[Model alloc]init];

}}

return
model;

}

25.說(shuō)說(shuō)響應(yīng)鏈
http://www.tuicool.com/articles/6jmUje
從手指觸摸屏幕的地方的最上層控件是第一響應(yīng)者,事件會(huì)沿著響應(yīng)鏈一直向下傳遞直到被接受并作出處理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,779評(píng)論 18 399
  • 設(shè)計(jì)模式是什么? 你知道哪些設(shè)計(jì)模式,并簡(jiǎn)要敘述? 設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn),就是用比較成熟的邏輯去處理某一種類(lèi)型的...
    Jt_Self閱讀 771評(píng)論 0 4
  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,217評(píng)論 30 472
  • 1.OC里用到集合類(lèi)是什么? 基本類(lèi)型為:NSArray,NSSet以及NSDictionary 可變類(lèi)型為:NS...
    輕皺眉頭淺憂(yōu)思閱讀 1,396評(píng)論 0 3
  • 設(shè)計(jì)模式是什么? 你知道哪些設(shè)計(jì)模式,并簡(jiǎn)要敘述? 設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn),就是用比較成熟的邏輯去處理某一種類(lèi)型的...
    small_Sun閱讀 459評(píng)論 0 4