標籤:
一、簡答題1、下面這些方法的方法名是什嗎?
-(void)person-(void)personWithAge;-(void)personWithAge:(int)age;-(void)personWithAge:(int)age name:(NSString *)name;
答:person / personWithAge / personWithAge: / personWithAge: name:2、NSArray和NSSet有什麼使用區別? (1)NSArray是有序的,而NSSet是無序的。 (2)NSArray資料可以相同,但是NSSet資料是不相同的。 (3)在搜尋一個一個元素時NSSet的效率比NSArray高,因為NSSet用到了一個演算法hash。比如你要儲存和訪問一個資料元素A,一個hash演算法直接就能找到A的應該儲存的位置和儲存位置。而NSArray則需要遍曆整個數組。3、定義一個無參傳回值的block變數,並且調用這個block?//沒有傳回值,沒有參數的block
-(void)blockWithoutParameterAndReturnData{ void(^myBlock)(void) = ^ { NSLog(@"This is a block without parameter and returned value"); }; myBlock();}4、定義一個有參有傳回值的block變數,並且調用這個block?
-(void)AddParameterAndRestunValuesForBlock{ int(^blocknames)(int) = ^(int num) { return num * 30; }; int result = blocknames(2); NSLog(@"%d",result);} 5、你知道Swift是什麼嗎?談談對它目前的瞭解? Swift是蘋果新出的一個開發語言,它是基於C語言開發的,比Objective-C更加靈活方便。在不久的將來Swift會取代Objective-C作為iOS開發的主要語言。6、強引用和弱引用的區別? 強引用是持有對象,弱引用是不持有對象; 強引用可以釋放對象,但是弱引用不可以,當一個對象為強引用時,在其範圍之外的話,該對象所持有的對象被釋放;當一個對象為弱引用時,,它不持有對象,在對象釋放後,它自動被賦值為nil。7、strong、weak、assign各自使用的場合是什嗎? assign用於單一資料型別,如NSInteger,double,bool. 在ARC環境下,strong代替retain,weak代替assign; 在迴圈使用的時候,一端用strong,另一端則需要使用weak,防止迴圈調用。 OC物件類型一般都是用strong.8、分類(Category)有什麼作用
- 將類的實現分散到多個不同檔案或者多個不同架構中。
- 建立對私人方法的向前引用。
- 向對象添加非正式協議。
簡單來說就是:Category可以對類進行擴充,可以給所有類添加自己的方法。 9、談談你對self和super的理解? 在我的世界觀裡,self就是一個類的隱藏的參數,指向當前調用方法的類; 而super指的是父類。使用super就會告訴編譯器,要去調用父類的方法。super只是一個編譯指示符。10、編譯器遇到下面的代碼會自動產生哪些代碼?
self.age = 20; 自動產生[set stAge:20]; int age = self.age; //有待完善 NSArray *names = @[@“mj”,@”jj”,@“jay”]; // NSArray *names = [[NSArray alloc] initWithObjects:@"mj",@"jj",@"jay", nil]; id money = @20; 自動產生: NSNumber *money1 = [[NSNumber alloc] initWithInt:20];
二、編程題11、用兩種不同的思路編寫函數來計算下面的式子: 1+2+3+4+。。。。。+n(n>=1)(PS:一共要寫兩個函數,僅僅再for/while/do之間更換不算新的思路) 思路一:
- (NSInteger)addToN1:(NSInteger)n { NSInteger total = 0; for(int i=1;i<=n;i++) { total +=i; } return total;}思路二、
- (NSInteger)addToN2:(NSInteger)n { NSInteger total = 0; total = n*(n+1)/2; return total; }12、使用Category給某類(哪個類自己思考)增加一個方法,用來完成以下功能:假設一個OC可變數組存放著很多整數字串,比如@“10”、@“20”.要求調用完這個方法之後,這個數組裡面的數字字元是升序排列的,(從小到大排列)
NSMutableArray+Additions.h//// NSMutableArray+Additions.h// MianShiDemo//// Created by zhanggui on 15/7/19.// Copyright (c) 2015年 zhanggui. All rights reserved.// #import <Foundation/Foundation.h> @interface NSMutableArray (Additions) +(NSMutableArray *)sortValues:(NSMutableArray *)mutableArray;@endNSMutableArray+Additions.m//// NSMutableArray+Additions.m// MianShiDemo//// Created by zhanggui on 15/7/19.// Copyright (c) 2015年 zhanggui. All rights reserved.//#import "NSMutableArray+Additions.h"@implementation NSMutableArray (Additions)+(NSMutableArray *)sortValues:(NSMutableArray *)mutableArray{ NSComparator finderSort = ^(id string1,id string2) { if ([string1 integerValue]>[string2 integerValue]) { return (NSComparisonResult)NSOrderedDescending; }else if ([string1 integerValue]<[string2 integerValue]) { return (NSComparisonResult)NSOrderedAscending; }else { return (NSComparisonResult)NSOrderedSame; } }; NSMutableArray *arr= [[NSMutableArray alloc] initWithCapacity:[mutableArray count]]; NSArray *sortedArr = [mutableArray sortedArrayUsingComparator:finderSort]; for(int i=0;i<[mutableArray count];i++) { [arr addObject:[sortedArr objectAtIndex:i]]; } return arr;}@end測試方法:- (void)viewDidLoad { [super viewDidLoad]; NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithObjects:@"5",@"20",@"3",@"60" ,@"50",nil]; NSLog(@"%@",[NSMutableArray sortValues:mutableArray]);}13、使用Category給所有OC對象增加一個run方法(對象方法),然後在run方法中NSLog列印對象本身: NSObject+Additions.h //// NSObject+Additions.h// MianShiDemo//// Created by zhanggui on 15/7/19.// Copyright (c) 2015年 zhanggui. All rights reserved.// #import <Foundation/Foundation.h> @interface NSObject (Additions) -(void)run;@endNSObject+Additions.m//// NSObject+Additions.m// MianShiDemo//// Created by zhanggui on 15/7/19.// Copyright (c) 2015年 zhanggui. All rights reserved.// #import "NSObject+Additions.h" @implementation NSObject (Additions) -(void)run{ NSLog(@"%@",self);}@end14、使用Category給NSString類增加以下功能(需要用到的方法自己查資料或者猜)
- 計算英文字母的個數(比如@“235432534rre4645eer”,調用方法之後返回6)
- 字串反轉(比如@“abc”,調用後輸出@“cba”)
- 去除字串兩端空格(比如@“ jack roce ”,調用後返回@“jack rose”)
- 截取網站網域名稱中的www.和.com之間的字串(比如@“http://www.baidu.com”,輸出baidu)。
NSString+Additions.h//// NSString+Additions.h// MianShiDemo//// Created by zhanggui on 15/7/19.// Copyright (c) 2015年 zhanggui. All rights reserved.// #import <Foundation/Foundation.h> @interface NSString (Additions) /**判斷NSString中含有的字母個數*/-(NSInteger)getNumberOfLetterInString; /**反轉字串*/-(NSString *)reversalString;//刪除開始和結束的字串-(NSString *)deleteBackAndForwardBlank;//得到網域名稱-(NSString *)getDominFromWebLink;@end NSString+Additions.m //// NSString+Additions.m// MianShiDemo//// Created by zhanggui on 15/7/19.// Copyright (c) 2015年 zhanggui. All rights reserved.//#import "NSString+Additions.h"@implementation NSString (Additions)-(NSInteger)getNumberOfLetterInString{ NSInteger strLength = self.length; int result = (int)strLength; for(int i=0;i<strLength;i++) { char c = [self characterAtIndex:i]; if (c>=‘0‘ && c<= ‘9‘) { //判斷是不是數字 result = result-1; NSLog(@"數字有:%c",c); } } return result;}-(NSString *)reversalString{ NSMutableString *s = [NSMutableString string]; NSUInteger length = self.length; for(NSUInteger i=length;i>0;i--) { [s appendString:[self substringWithRange:NSMakeRange(i-1, 1)]]; } return s;}-(NSString *)deleteBackAndForwardBlank{ NSString *trimmedString = [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; return trimmedString;}-(NSString *)getDominFromWebLink{ NSString *tempString = [NSString string]; NSRange wwwRange = [self rangeOfString:@"www."]; NSRange comRange = [self rangeOfString:@".com"]; NSRange needRange =NSMakeRange(wwwRange.length+wwwRange.location, comRange.location-wwwRange.location-wwwRange.length); tempString = [self substringWithRange:needRange]; return tempString;}@end 15、定義一個書本類,需要有名字、價格、出版年份(比如2014年)三個成員屬性,建立5個書本對象,屬性可以任意值,但名字不要使用中文
- 增加一個便利構造方法(Factory 方法),用於快速建立對象
- 使用NSLog直接輸出書本對象時,要保證輸出字串格式為:這本書叫做xx,價格是xx,出版年份是xx
- 對5本書本對象按照出版年份—》價格—》名字優先順序從小到大排序(出版年份相同按照價格排序,價格相同按照名字排序)
iOS基礎面試題一