首页 > 代码库 > iOS 面试集锦2

iOS 面试集锦2

4.写一个setter方法用于完成@property (nonatomic,retain)NSString *name,写一个setter方法用于完成@property(nonatomic,copy)NSString *name

 

  1. - (void) setName:(NSString*) str  
  2. {  
  3.     [str retain];  
  4.     [name release];  
  5.     name = str;  
  6. }  
  7. - (void)setName:(NSString *)str  
  8. {  
  9.     id t = [str copy];  
  10.     [name release];  
  11.     name = t;  
  12. }  

 

6.常见的object-c的数据类型有那些, 和C的基本数据类型有什么区别?如:NSInteger和int

object-c的数据类型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,这些都是class,创建后便是对象,而C语言的基本数据类型int,只是一定字节的内存空间,用于存放数值;NSInteger是基本数据类型,并不是NSNumber的子类,当然也不是NSObject的子类。NSInteger是基本数据类型Int或者Long的别名(NSInteger的定义typedef long NSInteger),它的区别在于,NSInteger会根据系统是32位还是64位来决定是本身是int还是Long。

 

 

10.如何对iOS设备进行性能测试?

 

Profile-> Instruments ->Time Profiler

 

11.看下面的程序,第一个NSLog会输出什么?这时str的retainCount是多少?第二个和第三个呢? 为什么?

 

 

 

  1. =======================================================  
  2. NSMutableArray* ary = [[NSMutableArray array] retain];  
  3. NSString *str = [NSString stringWithFormat:@"test"];  
  4. [strretain];  
  5. [aryaddObject:str];  
  6. NSLog(@"%@%d",str,[str retainCount]);  
  7. [strretain];  
  8. [strrelease];  
  9. [strrelease];  
  10. NSLog(@"%@%d",str,[str retainCount]);  
  11. [aryremoveAllObjects];  
  12. NSLog(@"%@%d",str,[str retainCount]);  
  13. =======================================================  

 

 

 

str的retainCount创建+1,retain+1,加入数组自动+1

 

3

 

retain+1,release-1,release-1

 

2

 

数组删除所有对象,所有数组内的对象自动-1

 

1

 

12. Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?

 

线程创建有三种方法:使用NSThread创建、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue;在主线程执行代码,方法是performSelectorOnMainThread,如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone:

 

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

 

给出委托方法的实例,并且说出UITableVIew的Data Source方法

 

答案:CocoaTouch框架中用到了大量委托,其中UITableViewDelegate就是委托机制的典型应用,是一个典型的使用委托来实现适配器模式,其中UITableViewDelegate协议是目标,tableview是适配器,实现UITableViewDelegate协议,并将自身设置为talbeview的delegate的对象,是被适配器,一般情况下该对象是UITableViewController。

 

UITableVIew的Data Source方法有- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath;

 

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

 

在应用中可以创建多少autorelease对象,是否有限制?

 

答案:无

 

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

 

如果我们不创建内存池,是否有内存池提供给我们?

 

答案:界面线程维护着自己的内存池,用户自己创建的数据线程,则需要创建该线程的内存池

 

5.When you will create an autorelease pool in your application?

 

什么时候需要在程序中创建内存池?

 

答案:用户自己创建的数据线程,则需要创建该线程的内存池

 

6.When retain count increase?

 

什么时候内存计数会增加?

 

答案:见iOS面试题(一)

 

7.What are commonly used NSObject class methods?

 

类NSObject的那些方法经常被使用?

 

答案:NSObject是Objetive-C的基类,其由NSObject类及一系列协议构成。

 

其中类方法alloc、class、 description 对象方法init、dealloc、– performSelector:withObject:afterDelay:等经常被使用 

 

8.What is convenience constructor?

 

什么是简便构造方法?

 

答案:简便构造方法一般由CocoaTouch框架提供,如NSNumber的 + numberWithBool:  + numberWithChar:  + numberWithDouble:  + numberWithFloat:  + numberWithInt:

 

Foundation下大部分类均有简便构造方法,我们可以通过简便构造方法,获得系统给我们创建好的对象,并且不需要手动释放。

 

 

 

9.How to design universal application in Xcode?

 

如何使用Xcode设计通用应用?

 

答案:使用MVC模式设计应用,其中Model层完成脱离界面,即在Model层,其是可运行在任何设备上,在controller层,根据iPhone与iPad(独有UISplitViewController)的不同特点选择不同的viewController对象。在View层,可根据现实要求,来设计,其中以xib文件设计时,其设置其为universal。

 

10.What is keyword atomic in Objective C?

 

在Objetive-C什么时原子关键字

 

答案:atomic,nonatomic见iOS面试题(一)

 

11.What are UIView animations?

 

UIView的动画效果有那些?

 

答案:有很多,如  UIViewAnimationOptionCurveEaseInOut     UIViewAnimationOptionCurveEaseIn     UIViewAnimationOptionCurveEaseOut    UIViewAnimationOptionTransitionFlipFromLeft   UIViewAnimationOptionTransitionFlipFromRight     UIViewAnimationOptionTransitionCurlUpUIViewAnimationOptionTransitionCurlDown 

 

如何使用可见该博文

 

12.How can you store data in iPhone applications?

 

在iPhone应用中如何保存数据?

 

答案:有以下几种保存机制:

 

1.通过web服务,保存在服务器上

 

2.通过NSCoder固化机制,将对象保存在文件中

 

3.通过SQlite或CoreData保存在文件数据库中

 

13.What is coredata?

 

什么是coredata?

 

答案:coredata是苹果提供一套数据保存框架,其基于SQlite

 

14.What is NSManagedObject model?

 

什么是NSManagedObject模型?

 

答案:NSManagedObject是NSObject的子类 ,也是coredata的重要组成部分,它是一个通用的类,实现了core data 模型层所需的基本功能,用户可通过子类化NSManagedObject,建立自己的数据模型。

 

 

 

15.What is NSManagedobjectContext?

 

什么是NSManagedobjectContext?

 

答案:NSManagedobjectContext对象负责应用和数据库之间的交互。

 

16.What is predicate?

 

什么是谓词?

 

答案:谓词是通过NSPredicate,是通过给定的逻辑条件作为约束条件,完成对数据的筛选。

 

 

 

    predicate = [NSPredicate predicateWithFormat:@"customerID == %d",n];

 

    a = [customers filteredArrayUsingPredicate:predicate];

 

17.What kind of persistence store we can use with coredata?

 

使用coredata有哪几种持久化存储机制?

 

答案:无

 

 

1 谈谈对Block 的理解?并写出一个使用Block执行UIVew动画?

 

答案:Block是可以获取其他函数局部变量的匿名函数,其不但方便开发,并且可以大幅提高应用的执行效率(多核心CPU可直接处理Block指令)

 

 

 

  1. [UIView transitionWithView:self.view  
  2.                   duration:0.2  
  3.                    options:UIViewAnimationOptionTransitionFlipFromLeft  
  4.                 animations:^{ [[blueViewController view] removeFromSuperview]; [[self view] insertSubview:yellowViewController.view atIndex:0]; }  
  5.                 completion:NULL];  

 

 

 

2 写出上面代码的Block的定义。

 

答案:

 

typedef void(^animations) (void);

 

typedef void(^completion) (BOOL finished);

 

 

 

3 试着使用+ beginAnimations:context:以及上述Block的定义,写出一个可以完成

 

+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);操作的函数执行部分

 

答案:无

 

网络部分

 

3 做过的项目是否涉及网络访问功能,使用什么对象完成网络功能?

 

答案:ASIHTTPRequest与NSURLConnection

 

4 简单介绍下NSURLConnection类及+ sendSynchronousRequest:returningResponse:error:与– initWithRequest:delegate:两个方法的区别?

 

答案:  NSURLConnection主要用于网络访问,其中+ sendSynchronousRequest:returningResponse:error:是同步访问数据,即当前线程会阻塞,并等待request的返回的response,而– initWithRequest:delegate:使用的是异步加载,当其完成网络访问后,会通过delegate回到主线程,并其委托的对象。

 

 

1 多线程是什么 
多线程是个复杂的概念,按字面意思是同步完成多项任务,提高了资源的使用效率,从硬件、操作系统、应用软件不同的角度去看,多线程被赋予不同的内涵,对于硬件,现在市面上多数的CPU都是多核的,多核的CPU运算多线程更为出色;从操作系统角度,是多任务,现在用的主流操作系统都是多任务的,可以一边听歌、一边写博客;对于应用来说,多线程可以让应用有更快的回应,可以在网络下载时,同时响应用户的触摸操作。在iOS应用中,对多线程最初的理解,就是并发,它的含义是原来先做烧水,再摘菜,再炒菜的工作,会变成烧水的同时去摘菜,最后去炒菜。
 
2 iOS 中的多线程
 
iOS中的多线程,是Cocoa框架下的多线程,通过Cocoa的封装,可以让我们更为方便的使用线程,做过C++的同学可能会对线程有更多的理解,比如线程的创立,信号量、共享变量有认识,Cocoa框架下会方便很多,它对线程做了封装,有些封装,可以让我们创建的对象,本身便拥有线程,也就是线程的对象化抽象,从而减少我们的工程,提供程序的健壮性。
 
GCD是(Grand Central Dispatch)的缩写 ,从系统级别提供的一个易用地多线程类库,具有运行时的特点,能充分利用多核心硬件。GCD的API接口为C语言的函数,函数参数中多数有Block,关于Block的使用参看这里,为我们提供强大的“接口”,对于GCD的使用参见本文
 
 
NSOperation与Queue
NSOperation是一个抽象类,它封装了线程的细节实现,我们可以通过子类化该对象,加上NSQueue来同面向对象的思维,管理多线程程序。具体可参看这里:一个基于NSOperation的多线程网络访问的项目。
   
NSThread
NSThread是一个控制线程执行的对象,它不如NSOperation抽象,通过它我们可以方便的得到一个线程,并控制它。但NSThread的线程之间的并发控制,是需要我们自己来控制的,可以通过NSCondition实现。
参看   

iOS多线程编程之NSThread的使用

 
 
其他多线程
在Cocoa的框架下,通知、Timer和异步函数等都有使用多线程,(待补充).
 
 
 
3 iOS多线程常见面试题
在项目什么时候选择使用GCD,什么时候选择NSOperation?
项目中使用NSOperation的优点是NSOperation是对线程的高度抽象,在项目中使用它,会使项目的程序结构更好,子类化NSOperation的设计思路,是具有面向对象的优点(复用、封装),使得实现是多线程支持,而接口简单,建议在复杂项目中使用。
项目中使用GCD的优点是GCD本身非常简单、易用,对于不复杂的多线程操作,会节省代码量,而Block参数的使用,会是代码更为易读,建议在简单项目中使用。