zoukankan      html  css  js  c++  java
  • 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实现。
     
     
    其他多线程
    在Cocoa的框架下,通知、Timer和异步函数等都有使用多线程,(待补充).
     
     
     
    3 iOS多线程常见面试题
    在项目什么时候选择使用GCD,什么时候选择NSOperation?
    项目中使用NSOperation的优点是NSOperation是对线程的高度抽象,在项目中使用它,会使项目的程序结构更好,子类化NSOperation的设计思路,是具有面向对象的优点(复用、封装),使得实现是多线程支持,而接口简单,建议在复杂项目中使用。
    项目中使用GCD的优点是GCD本身非常简单、易用,对于不复杂的多线程操作,会节省代码量,而Block参数的使用,会是代码更为易读,建议在简单项目中使用。
  • 相关阅读:
    阿里云的服务器内网互通的前提条件
    Java Map 接口
    ModelAndView学习笔记
    tomcat错误信息解决方案【严重:StandardServer.await: create[8005]】
    jquery获得select option的值 和对select option的操作
    【Git使用详解】Egit的常用操作详解
    iOS
    iOS
    iOS
    iOS
  • 原文地址:https://www.cnblogs.com/yulang314/p/3839921.html
Copyright © 2011-2022 走看看