iOS基础面试题一

一、简答题
1、下面这些方法的方法名是什么?
1
2
3
4
-( 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
1
2
3
4
5
6
7
-( void )blockWithoutParameterAndReturnData
{
     void (^myBlock)( void )  = ^ {
         NSLog (@ "This is a block without parameter and returned value" );
     };
     myBlock();
}
4、定义一个有参有返回值的block变量,并且调用这个block?
1
2
3
4
5
6
7
8
       -( 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、编译器遇到下面的代码会自动生成哪些代码?
  
1
2
3
4
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之间更换不算新的思路)
     思路一:
1
2
3
4
5
6
7
- ( NSInteger )addToN1:( NSInteger )n {
     NSInteger  total = 0;
     for ( int  i=1;i<=n;i++) {
         total +=i;
     }
     return  total;
}
思路二、
1
2
3
4
5
- ( NSInteger )addToN2:( NSInteger )n {
   NSInteger  total = 0;
   total = n*(n+1)/2;
   return  total;
    }
12、使用Category给某类(哪个类自己思考)增加一个方法,用来完成以下功能:假设一个OC可变数组存放着很多整数字符串,比如@“10”、@“20”.要求调用完这个方法之后,这个数组里面的数字字符是升序排列的,(从小到大排列)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
      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;
@end
NSMutableArray +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;
@end
NSObject +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 );
}
@end
14、使用Category给NSString类增加以下功能(需要用到的方法自己查资料或者猜)
  • 计算英文字母的个数(比如@“235432534rre4645eer”,调用方法之后返回6)
  • 字符串反转(比如@“abc”,调用后输出@“cba”)
  • 去除字符串两端空格(比如@“  jack roce ”,调用后返回@“jack rose”)
  • 截取网站域名中的www.和.com之间的字符串(比如@“http://www.baidu.com”,输出baidu)。
   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
   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个书本对象,属性可以任意值,但名字不要使用中文
  • 增加一个便利构造方法(工厂方法),用于快速创建对象
  • 使用NSLog直接输出书本对象时,要保证输出字符串格式为:这本书叫做xx,价格是xx,出版年份是xx
  • 对5本书本对象按照出版年份—》价格—》名字优先级从小到大排序(出版年份相同按照价格排序,价格相同按照名字排序)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值