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:

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

答案:无

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

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

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

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

答案:见iOS面试题(一)

什么是简便构造方法?

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

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 做过的项目是否涉及网络访问功能,使用什么对象完成网络功能?

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实现。
 
3 iOS多线程常见面试题
在项目什么时候选择使用GCD,什么时候选择NSOperation?
项目中使用NSOperation的优点是NSOperation是对线程的高度抽象,在项目中使用它,会使项目的程序结构更好,子类化NSOperation的设计思路,是具有面向对象的优点(复用、封装),使得实现是多线程支持,而接口简单,建议在复杂项目中使用。
项目中使用GCD的优点是GCD本身非常简单、易用,对于不复杂的多线程操作,会节省代码量,而Block参数的使用,会是代码更为易读,建议在简单项目中使用。

最新文章

  1. python的应该关注的语法
  2. Returns: range-based (not absolute) index within the current range
  3. js实现图片向上播放(轮番滚动)
  4. Python基础学习笔记(八)常用字典内置函数和方法
  5. 用Google Analytics跟踪JavaScript Errors (译)
  6. docker 查看容器详细
  7. 公司内网Debian Server上的openvpnserver搭建并通过SSH隧道转发到广域网
  8. CSS3影子 box-shadow使用和技巧总结
  9. ECMAScript6之String类型的扩展
  10. 浅谈 var 关键字
  11. EXCEL技能之数据去重
  12. Lua学习之加载其他lua文件
  13. Java 实现 AES 加解密
  14. ajax请求本地文件
  15. 利用Junit实现eclipse单元测试
  16. 01 workerman之GatewayWorker框架简单使用
  17. 【Fanvas技术解密】HTML5 canvas实现脏区重绘
  18. html中label及加上属性for之后的用法
  19. servlet中请求转发(forword)和重定向(redirect)的区别
  20. html <br/>引起的”血案“

热门文章

  1. 2014-7-7 NOIP模拟赛(图论)
  2. IT兄弟连 JavaWeb教程 EL与JSTL表达式经典案例
  3. 花花的森林(倍增,LCA
  4. hadoop HA集群搭建(亲测)
  5. 子div块中设置margin-top时影响父div块位置的解决办法及其原因
  6. android videoView 加载等待
  7. Verify the Developer App certificate for youraccount is trusted on your device
  8. Codeforces 1136E(转化+线段树维护)
  9. Ubuntu安装指定版本的docker
  10. 转 错误:ORA-28002/ORA-65162 : the password will expire within 7 days 解决方法