笔试题

1. Difference between shallow copy and deep copy?
1. 浅拷贝:指针(地址)拷贝,不会产生新对象 
2. 深拷贝:内容拷贝,会产生新对象
 
2. What is advantage of categories? What is difference between implementing a category and inheritance? 
1. 分类可以在不修改原来类模型的基础上拓充方法
2. 分类只能扩充方法、不能扩充成员变量;继承可以扩充方法和成员变量      (方法重复)
3. 继承会产生新的类     
 
3. Difference between categories and extensions?

1. 分类是有名称的,类扩展没有名称
2. 分类只能扩充方法、不能扩充成员变量;类扩展可以扩充方法和成员变量
3. 类扩展一般就写在.m文件中,用来扩充私有的(只能在本类中使用)方法和成员变量(属性)
4. ava中的接口弥补了这个问题。Difference between protocol in objective c and interfaces in java?

 
这道题目比较专业,从分考察一个程序员的功底。协议:解决了OC中的单继承,弥补了OC对于C_++的不足。XXXX。

1. Java的接口中声明的方法必须都实现
2. Oc的protocol中声明的方法并不一定要实现
 
5. What are KVO and KVC?
1. KVC是键值编码,可以通过一个字符串的key(属性名)修改对象的属性值    可以改变私有的(只读)属性的值
2. KVO是键值监听,可以监听一个对象属性值的改变(注册监听实现回调)
 
6. What is purpose of delegates?

1. 两个对象之间传递数据和消息     View的btn被点了代理通知控制器切换子控制器(MVC)
2. 解耦,拆分业务逻辑(解决View和C之间互相倒入的关系,这种互相依赖的关系叫做耦合性)
 
7. What are mutable and immutable types in Objective C?

1. mutable是可变类型,比如NSMutableArray,可以动态往里面添加元素
2. immutable是不可变类型,比如NSArray,固定的存储空间,不能添加元素
 
8. When we call objective c is runtime language what does it mean?

1. 动态绑定:对象类型在运行时才真正确定 NSStrign *str = [NSData alloc]init];
2. 多态性    父类指针指向子类对象  
3. 消息机制
 
9. what is difference between NSNotification and protocol?

1. 通过NSNotification可以给多个对象传递数据和消息
2. 通过protocol(代理模式)只能给一个对象传递数据和消息 
 
10. What is push notification?
1. 本地推送:程序内部弹出通知到用户设备     
2. 远程推送:由推送服务器推送通知到用户设备 
 
11. What is Polymorphism
多态:父类指针指向子类对象:创建一个子类的对象赋值给父类指针。 一种事务的多种形态:子类对于“吃饭”这个事务有不同的吃法。  
 
12. What is Singleton?
alloc  copy   alloc    永远只有一个内存地址
单例:保证程序运行过程中,永远只有一个对象实例
目的是:全局共享一份资源、节省不必要的内存开销
 
13. What is responder chain?

 响应者链:
• UIResponder有一个nextResponder属性,通过该属性可以组成一个响应者链,事件或消息在其路径上进行传递
• 如果UIResponder没有处理传给它的事件,会将未处理的消息转发给自己的nextResponder
14. Difference between frame and bounds?
 
1. frame以父控件的左上角为坐标原点
2. bounds以控件本身的左上角为坐标原点
 
15. Difference between method and selector?

通过一个selector可以找到方法地址,进而调用一个方法 
 
16. Is there any garbage collection mechanism in Objective C.?
咩有
1. OC 1.0没有垃圾回收
2. OC 2.0有垃圾回收,只能用在Mac上
3. iOS中有ARC机制,是编译器特性,垃圾回收是运行时特性
 
17. What is NSOperationqueue?

1. 用来存放NSOperation对象的队列,可以用来异步执行一些操作   
2. 一般可以用在网络请求等耗时操作
 
18. What is lazy loading?

延迟加载:比如控制器的view,在第一次用到view时才会调用loadView方法进行创建      用到时创建(省内存)   保证只创建一次(提高性能)
19. Can we use two tableview controllers on one viewcontroller?
从技术角度上分析,一个控制器内部添加2个表格控制器是没有问题的       行。滚动控制器   
 
20. Can we use one tableview with two different datasources? How you will achieve this?
 
从对象属性上分析,tableView只有一个dataSource属性。
开发角度来讲,没人这么干
当然,真要使用2个不同的数据源,还是有其他办法解决的
1. When to use NSMutableArray and when to use NSArray? 
1. 当数组元素需要动态地添加或者删除时,用NSMutableArray
2. 当数组元素固定不变时,用NSArray
 
2. Give us example of what are delegate methods and what are data source methods of uitableview.
1. 代理方法:返回tableView每行的高度、监听tableView每行的选中
2. 数据源方法:返回tableView数据的组数和行数、每行显示什么数据
 
3. How many autoreleasepool you can create in your application? Is there any limit?
没有限制
 
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? 
当做一次retain或者copy操作,都有可能增加计数器
 
7. What are commonly used NSObject class methods?
NSObject常见的类方法有:alloc、new、description等
8. What is convenience constructor?
像NSStirng的stringWithFormat,NSNumber的numberWithInt
 
9. How to design universal application in Xcode?
1. 创建项目时,Device选择Universal
2. 可以创建一套痛用的数据模型
3. 根据iPhone\iPad选择不同的控制器(iPad可能用UISplitViewController)
4. 根据iPhone\iPad选择不同的界面
 
10. What is keyword atomic in Objective C?
1. atomic是原子性
2. atomic会对set方法的实现进行加锁
 
11. What are UIView animations?
UIView封装的核心动画可以通过类方法\block实现
 
12. How can you store data in iPhone applications?
1. 属性列表      wirteToFile   .plist
2. Preference(NSUserDefaults) 偏好设置   记得同步
3. 键值归档(NSKeyedArchiver、NSCoding)  
4. SQLite数据库      FMDB   离线缓存
5. Core Data       
 
13. What is NSManagedObject model?
NSManagedObject是Core Data中的实体对象
 
14. What is predicate?
谓词:可以以一定条件来过滤数组、字典等集合数据,也能用在Core Data的数据查询中
1. Object-C有多继承吗?没有的话用什么代替?
1. OC是单继承,没有多继承
2. 有时可以用分类和协议来代替多继承
 
2. Object-C有私有方法吗?私有变量呢?
1. OC没有类似@private的修饰词来修饰方法,只要写在.h文件中,就是公共方法
2. 可以使用类扩展(Extension)来增加私有方法和私有变量
 
3. 关键字const什么含义?
const int a;
int const a;
const int *a;
int const *a;
int * const a;
int const * const a;
1> 前两个的作用是一样:a 是一个常整型数
2> 第三、四个意味着 a 是一个指向常整型数的指针(整型数是不可修改的,但指针可以)
3> 第五个的意思:a 是一个指向整型数的常指针(指针指向的整型数是可以修改的,但指针是不可修改的)
4> 最后一个意味着:a 是一个指向常整型数的常指针(指针指向的整型数是不可修改的,同时指针也是不可修改的)
 
4. static的作用?
1. static修饰的函数是一个内部函数,只能在本文件中调用,其他文件不能调用
2. static修饰的全部变量是一个内部变量,只能在本文件中使用,其他文件不能使用
3. static修饰的局部变量只会初始化一次,并且在程序退出时才会回收内存
 
5. 线程和进程的区别?
1. 一个应用程序对应一个进程,一个进程帮助程序占据一块存储空间
2. 要想在进程中执行任务,就必须开启线程,一条线程就代表一个任务
3. 一个进程中允许开启多条线程,也就是同时执行多个任务
6. 堆和栈的区别?
1. 堆空间的内存是动态分配的,一般存放对象,并且需要手动释放内存
2. 栈空间的内存由系统自动分配,一般存放局部变量等,不需要手动管理内存
 
7. 为什么很多内置的类,如TableViewdelegate的属性是assign不是retain
1. tableView的代理一般都是它所属的控制器,控制器会对它内部的view做一次retain操作
2. 假设tableView也对代理(控制器)做一次retain操作,那么就出现循环retain问题
 
8. 定义属性时,什么情况使用copyassignretain
1. copy:NSString、Block等类型
2. assign:非OC对象类型, 基本数据类型(两个对象相互引用的时候,一端用retain, 一端用assign)
3. retain:OC对象类型
 
9. 对象是什么时候被释放的?
每个对象都有一个引用计数器,每个新对象的计数器是1,当对象的计数器减为0时,就会被销毁
 
10. tableView的重用机制?
这里只是简述:将离开屏幕的cell放到缓存池,重新拿来显示到屏幕的其他位置(其他自己详细描述)
 
11. ViewController loadViewviewDidLoadviewDidUnload分别是什么时候调用的,在自定义ViewCointroller时在这几个函数中应该做什么工作?
1. loadView
• 当第一次使用控制器的view时,会调用loadView方法创建view
• 一般在这里自定义view
 
1. viewDidLoad
• 当控制器的view创建完毕时会调用,也就是在loadView后调用
• 一般在这里添加子控件、初始化数据
 
1. viewDidUnload
• 当控制器的view因为内存警告被销毁时调用
• 一般在这里回收跟界面相关的资源(界面都会销毁了,跟界面相关的资源肯定不要了)
 
12. ViewControllerdidReceiveMemoryWarning是在什么时候调用的?默认的操作是什么?
• 当应用程序接收到系统的内容警告时,就有可能调用控制器的didRece…Warning方法
• 它的默认做法是:
• 当控制器的view不在窗口上显示时,就会直接销毁,并且调用viewDidUnload方法
 
13. 怎么理解MVC,在CocoaMVC是怎么实现的?
1. M:Model,模型,封装数据
2. V:View,视图界面,负责展示数据
3. C:Controller,控制器,负责提供数据(Model)给界面(View)
 
14. self.self->什么区别?
1. self.是调用get方法或者set放
2. self是当前本身,是一个指向当前对象的指针
3. self->是直接访问成员变量
 
15. idnil代表什么?
1. id类型的指针可以指向任何OC对象
2. nil代表空值(空指针的值, 0)
 
16. 如何对iOS设备进行性能测试?
Timer Profile
 
17. #import #include@class有什么区别?#import<> 跟 #import”"又什么区别?
1. #import和#include都能完整地包含某个文件的内容,#import能防止同一个文件被包含多次
2. @class仅仅是声明一个类名,并不会包含类的完整声明;@class还能解决循环包含的问题
3. #import <> 用来包含系统自带的文件,#import “”用来包含自定义的文件
 
18. 属性readwritereadonlyassignretaincopynonatomic 各是什么作用,在那种情况下用?
1. readwrite:同时生成get方法和set方法的声明和实现
2. readonly:只生成get方法的声明和实现
3. assign:set方法的实现是直接赋值,用于基本数据类型
4. retain:set方法的实现是release旧值,retain新值,用于OC对象类型
5. copy:set方法的实现是release旧值,copy新值,用于NSString、block等类型
6. nonatomic:非原子性,set方法的实现不加锁(比atomic性能高)
 
19. 写一个setter方法用于完成@property nonatomic,retainNSString *name,写一个setter方法用于完成@propertynonatomiccopyNSString *name.
1. @property (nonatomic, retain) NSString *name;
- (void)setName:(NSString *)name
{
if (_name != name) {
[_name release];
_name = [name retain];
}
}
1. @property(nonatomic, copy) NSString *name;
- (void)setName:(NSString *)name
{
if (_name != name) {
[_name release];
_name = [name copy];
}
}
20. 对于语句NSString*obj = [[NSData alloc] init]; ,编译时和运行时obj分别是什么类型?
1. 编译时是NSString类型
2. 运行时是NSData类型
 
21. 常见的object-c的数据类型有那些, 和C的基本数据类型有什么区别?
1. 常用OC类型:NSString、NSArray、NSDictionary、NSData、NSNumber等
2. OC对象需要手动管理内存,C的基本数据类型不需要管理内存
 
22. id 声明的变量有什么特性?
id声明的变量能指向任何OC对象
 
23. Objective-C如何对内存管理的,说说你的看法和解决方法?
1. 每个对象都有一个引用计数器,每个新对象的计数器是1,当对象的计数器减为0时,就会被销毁
2. 通过retain可以让对象的计数器+1、release可以让对象的计数器-1
3. 还可以通过autorelease pool管理内存
4. 如果用ARC,编译器会自动生成管理内存的代码
 
24. 内存管理的几条原则时什么?按照默认法则.哪些方法生成的对象需要手动释放?在和property结合的时候怎样有效的避免内存泄露?
1. 只要调用了alloc、copy、new方法产生了一个新对象,都必须在最后调用一次release或者autorelease
2. 只要调用了retain,都必须在最后调用一次release或者autorelease
3. @property如果用了copy或者retian,就需要对不再使用的属性做一次release操作
4. 如果用了ARC,另外讨论
 
25. 看下面的程序,三次NSLog会输出什么?为什么?
NSMutableArray* ary = [[NSMutableArray array] retain];  
NSString *str = [NSString stringWithFormat:@"test"];  // 1 
[str retain];   // 2
[ary addObject:str]; // 3  
NSLog(@"%d", [str retainCount]);  
[str retain];  // 4
[str release];   // 3
[str release];   // 2
NSLog(@"%d", [str retainCount]);  
[ary removeAllObjects]; // 1  
NSLog(@"%d", [str retainCount]);  
结果:3、2、1
 
 
26. OC中创建线程的方法是什么?如果指定在主线程中执行代码?如何延时执行代码?
1. 创建线程的方法
• NSThread
• NSOperationQueue和NSOperation
• GCD
1. 主线程中执行代码
• [self performSelectorOnMainThread: withObject: waitUntilDone:];
• [self performSelector: onThread:[NSThread mainThread] withObject: waitUntilDone:];
• dispatch_async(dispatch_get_main_queue(), ^{
});
1. 延时执行
• double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 
(int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){        
});
• [self performSelector: withObject: afterDelay:];
• [NSTimer scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:];
 

 


1. 描述下app的启动过程?
从Mian 函数入口,来到appdelegate,创建window,创建跟视图控制器并初始化视图loadView ,viewDidLoad,viewWillAppear,viewDidAppear…
 
1. NSTread,GCD,NSOperation他们之间的区别是什么?如何是NSOperationQueue作为串行队列执行任务?
NSTread:需要手动管理线程的生命周期(创建,开始执行,停止,销毁线程),效率比较低,使用麻烦。需要手动加锁。
 
GCD:C语言API,用来代替NSThread, 封装在dispatch库当中,不需要管理线程的生命周期,充分利用CPU多核,使用简单,内部自动加锁,效率极高,开发中经常用。
 
NSOperation:是对GCD的一封装,使用方便,创建队列,创建操作,将操作添加到队列,自动执行。可以设置依赖关系,可以控制线程的最大并发数量。
 
1. GCD中, dispatch_async是用来做什么的?它与dispatch_sync的区别是什么?
 
前者可以开启一个线程,后者不会开启子线程(在当前线程在执行)。
 
1. 什么是运行时(Runtime)?Method Swizzling呢?
运行时是OC的底层,OC代码在运行的时候会转成 runtime代码,动态添加/修改/删除一个类、一个方法或属性。
Method Swizzling:混淆两个方法。比如一个对象调用A方法时,通过swizzling,可以达到内部调用另一个B方法。
1. 什么是Runloop?
每个线程都有与之相应的run loop对象, 主线程会自行创建并运行run loop
Run loop分为:输入源和定时源
输入源传递异步消息。定时源则传递同步消息(本线程),在特定时间或者一定的时间间隔发生(输入源处理其他线程的消息,传递数据,回到主线程;定时源定时接受处理一写当前线程的事情,定时检查有没有刷新事件,点击事件,拖动)

1. iOS数据持久化方式有哪些?
属性列表:存储字典或数组
归档:存储对象,加密(一般用于个人账号信息的存储)
NSUserDefault:存储一些较小的设置信息。
Sqlite3、FMDB、Core Data:存储数据量较大的数据。
1. 谈以下对block 的理解
概念:
代码块,相当于宏定义,用到的时候调用。
作用:
1. 反向(逆传)传值 2.保存代码 3回调函数  
注意:
1.用copy修饰   
2.循环引用
 
1. 谈谈对MVC的理解?优缺点?他们之间是如何通信的?
(北京物流时间面试题)
M:Model,模型,封装数据
V:View,视图界面,展示数据
C:Controller,控制器,负责调度数据(Model)给界面(View)展示
1. 什么是JavaScript?他在哪端执行?
   做动态网页用到一种脚本语言,前端
1. 列举并描述出现在比较流行的WEB程序设计语言?以及他们的发展方向?
PHP,JavaScript,Java  
1. Objective—C有多继承吗 ?没有的话用什么代替?
没有。用协议来代替。
 
  1. NSNotification KVO的区别和用法是什么?什么时候应该使用通知,什么时候应该使用KVO?他们实现上有什么区别吗?
  2. 说说tableView的重用机制?

将离开屏幕的cell放到系统的缓存池,并没有销毁,当下个cell快要出现在屏幕上的时候,从缓存池拿来显示

  1. timer的时间周期准吗?为什么?怎样实现一个精准的timer

IOS中可以使用"mach_absolute_time"获取到CPUtickcount的计数值,可以 

通过"mach_timebase_info"函数获取到纳秒级的精确度 代码如下: uint64t 

start = 0; uint64t end = 0; uint64_t elapsed = 0;mach_timebase_info_t 

             timeBaseInfo = mach_timebase_info(info);

    

但是CPU线程之间的调度肯定要花费时间,所以只能尽可能的精确。

还可以调用NSRunloopgcd来提高timer的精确度

 

 

 

 

  1. 说说类别和类扩展的区别。

分类是有名称的,类扩展没有名称

分类只能扩充方法、不能扩充成员变量;类扩展可以扩充方法和成员变量

类扩展一般就写在.m文件中,用来扩充私有的方法和成员变量(属性)

  1. 代理的作用是什么?

两个对象之间传递数据和消息

解耦,拆分业务逻辑

(北京仙境乐网)

  1. 如果遇到棘手的程序问题,请写五个解决问题的参考网站?

cocoaChina \ code4.app\开源中国、GitHub\百度、Google

  1. 请画图描述一下远程推送的过程?

从当前设备上的应用发出远程通知由远程服务器上的程序发送到APNS,再由APNS把消息推送至设备上的程序

  1. 下面代码有什么问题?如何修复?(3处)

NSArray *arr=@[1,2,3,4,5,6,7,8,9,10];

for (int i=0;i<arr.count;i++)

{

int num=[arrobjectAtIndex:i];

if(num %2==1)

{

[arr removeObject:num];

continue;

  }

}

  1. 数组必须放对象,不能是int类型
  2. 不可变数组内存空间不可变,没有removeObject这个方法

(车伯通iOS笔试题)

  1. 什么是selector?如果一个selector中有多个参数,该如何调用selector

             选择器.用来包装方法 

            SEL theSelector = @selector(yourMethodWithString:number:) 

NSMethodSignature * sig = 

                      [selfmethodSignatureForSelector:theSelector]; 

            NSInvocation * theInvocation = [NSInvocation   

                      invocationWithMethodSignature:sig]; 

            [theInvocation setTarget:self]; 

[theInvocation setSelector:theSelector];

 

  1. 两个或多个iOS app之间互相交换数据的方式有哪些?(请尽可能详细)
    urlscheme
    openurl @"xxx://"
     
     
    3.objective—C中所有实例变量默认的访问权限为( C )

    A、public  B、private       C、protected       D、任意权限
    1. 新闻内容页的图片需要缓存到本地,请描述实现方案。
    在本地创建个image文件夹,图片下载完成存储到image文件夹并将图片的地址作为key,下次显示图片的时候根据图片的地址去image文件夹读取,有就显示,没有再下载,下载完存储到image。
    1. 静态方法和动态方法区别
    .静态的方法在整个应用程序其间存储在内存中,速度快,但占用内存. .动态的方法在先声明类实例才能调用类中的方法.
    1. NSNumber ,NSInterge ,int区别
    NSNumber是对象,存储在堆,后两个是int类型,存储在栈。
    1. APP iOS入口
    Main函数
    1. static作用
    static修饰的函数只能在本文件中调用
    static修饰的全部变两只能在本文件中使用
    static修饰的局部变量只会初始化一次
    1. Iphone,ipad,itouch中使用的框架是( C )
    A、arm  B、i386      C、x86    D、1A-32
    5.简单描述对xmpp和sip标准协议的理解,可结合自己的项目经历、
   XMPP一个开源形式组织产生的网络即时通信,具有良好的扩展性
SIP(Session Initiation Protocol),会话发起协议
SIP是建立VOIP连接的 IETF 标准,IETF是全球互联网最具权威的技术标准化组织
 
6.什么时候用delegate ,什么时候用notification(通知)?
在开发中V里的一些触发事件(比如点击Button,侧滑等),需要通知C处理一些操作时常用delegate;
一处改变,多出响应的时候用notification;跨多个控制器的时候
7.在客户端和服务器通信过程中,长链接和短链接有何区别?请举例说明。
Socket长连接,在有网的情况下时刻保持连接状态;Http:非持续连接,连接上断开,传输速度更快。
8.iOS开发者账号中,最多能够添加几台设备号?
100
9.解释UIView的以下方法,并举例说明
layoutSubview,setNeedsLayout,layoutIfNeeded
layoutSubview:重新布局子控件时调用,自己的frame改了。
layoutIfNeeded:手动调用强制重新布局,内部调用layoutSubview
setNeedsLayout:如果需要调整控件的frame时调用(调整autoLayout约束的效果)   
11.用什么函数获取当前的UIApplication实例?
[UIApplication sharedApplication];
12,常见的图片格式的后最有哪些?那些事无损压缩?那些是有损压缩?
Png无损高清
JPEG有损压缩
1. 列举一些常用的iOS开发的开源类库。
AFN ASI SDWebImage MJRefresh JsonModel FMDB  UM  BMK 
1. prel是——python是——?D
A.重构术语   B.网络协议  C.人名   D编程语言 
1. 写一个setter方法用于完成@property。。。。*name。
@property (nonatomic, retain) NSString *name;
- (void)setName:(NSString *)name
{
if (_name != name) {
[_name release];
_name = [name retain];
}
}
1. id生命的对象有什么特性?
id声明的变量能指向任何OC对象
选择题
1、xwmmnaxd不是动态语言的特性     
A.在运行时替换一个类
B.在运行时动态加载lib文件
C.在运行时修改对象中的方法
D.在运行时增加对象的方
2、UIViewController在显示过程中,各个方法的调用顺序是A 
A.init—>viewDidLoad—>viewDidAppear—>viewDidUnload
B.init—>viewAppear—>viewDidLoad—>viewDidUnload
C.init—>viewDidLoad—>viewDidUnload—>viewDidAppear
D.init—>viewDidAppear—>viewDidUnload—>viewDidLoad
 

什么是NSManagedObject
什么是NSManagedObjectContext
NSManagedObject是Core Data中的实体对象
NSManagedObjectContext是Core Data中的上下文
2、Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果延时执行代码、方法又是什么?
创建线程的方法
NSThread
NSOperation
GCD
主线程中执行代码
[self performSelectorOnMainThread: withObject: waitUntilDone:];
[self performSelector: onThread:[NSThread mainThread] withObject: waitUntilDone:];
dispatch_async(dispatch_get_main_queue(), ^{
});
延时执行
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){     });
[self performSelector: withObject: afterDelay:];
[NSTimer scheduledTimerWithTimeInterval:  target: selector: userInfo: repeats:];
 
3、#import跟#include有什么区别,@class呢?
#import和#include都用于包含文件,#import能防止文件被包含多次
@class是声明一个类,不会包含属性和方法;
@class还能解决循环包含
#import <> 用来包含系统自带的文件,#import “”用来包含自定义的文件
1. 说明weak于__weak的作用及常用在什么时候。
前者用修饰已经被强引用的对象(比如已经添加到数组里面的对象,已经添加到self.view 里面的对象);后者用于定义一个弱类型的变量,避免循环引用。
1. 书写一个block、并简单描述block。
Typedef  Void(^MyBlock)()   定义一个返回值为空,参数为空,名字为MyBlock的block
1. Object c中多线程有几种实现方式,都有什么?
NSthread  GCD   NSOperation
1. CALayer和UIView有什么区别和联系?Core Animation是如何实现动画过程的?
每个View都有一个layer属性。
创建CAAnimation对象
设置CAAnimation对象的属性
将对象添加到CALayer上
1. 你使用过Objective-C的运行时编程(Runtime Programming)么?如果使用过,你用他做了什么?你还能记得你使用的相关的头文件或者某些方法的名称吗?
运行时机制,runtime库里面包含了跟类、成员变量、方法相关的API,比如获取类里面的所有成员变量,为类动态添加成员变量,动态改变类的方法实现,为类动态添加新的方法等 需要导入<objc/message.h><objc/runtime.h>
1. iOS系统架构分几个层,清华一下iOS的系统构架。
核心操作系统层(the Core OS layer),核心服务层(the Core Services layer),媒体层(the Media layer),可轻触层(the Cocoa Touch layer)
1. 请阐述ViewController的生命周期。
loadView :创建view,做些初始化操作。
   viewDidLoad :view加载完毕时调用,添加子控件、初始化数据
      viewWillAppear : view 将要出现在用户眼前的时候调用
   viewDidUnload :内存警告被销毁时调用
1. 什么是retain count?手动引用计数(MRC)与自动引用计数(ARC)的区别是什么?在ARC的项目中,会出现内存泄露吗?
retain count是引用计数。MRC需要手动管理内存,ARC是Xcode编译器的特性,自动加上管理内存的代码。很少会出现内存泄露。
1. 为什么很多内置类如UITableViewController的delegate属性都是assign而不是retion的?
tableView的代理一般都是它所属的控制器,控制器会对它内部的view做一次retain操作
假设tableView也对代理(控制器)做一次retain操作,那么就出现循环retain问题
1. 使用块对象(block)时候需要注意什么?
2. 用copy修饰
3. 注意循环引用造成内存泄露
4. 请用Objective-C实现一个Singletion类。
Static Person *p = nil;
实现一个类方法,实现allocWithZoon,copyWithzoon,retain,
1. [NSThread  sleepForTimeInterval]和[NSCondition wait]的区别是什么?
前者是线程等待多长时间后执行,后者在wait函数内部会调用了unlock函数,也就是说在调用wati函数后,这个NSCondition对象就处于了无锁的状态。

1. 当内存警告,应该如何处理?
清楚内存缓存
停止所有下载操作
1. 在使用NSUserDefauts存储数据时需要注意什么?
1、同步,保证即时存入。2.存储时的字符窜和读取时的字符窜一样。
6一个列表,滑动了一下,判断是向上还是向下滑动?
-(void)scrollViewWillBeginDragging:(UIScrollView*)scrollView{
oldY = scrollView.contentOffset.y;
}
-(void)scrollVIewDidEndDragging:(UIScrollView*)scrollView willDecelerate:(BOOL)deselerat
{
If(scrollView.contentOffset.y>oldY)
{
向下
}
Else
{
向上
}
}
7拼接两个字符串,列举你的方法
string = [NSString initWithFormat:@"%@,%@", string1, string2 ];
string = [string1 stringByAppendingString:string2];
string = [string stringByAppendingFormat:@"%@,%@",string1, string2];
 
8简述KVO实现方式
注册addObsever
回调obsever
移除removeObsever
9 static
1>static修饰的函数是一个内部函数,只能在本文件中调用,其他文件不能调用
2>static修饰的全部变量是一个内部变量,只能在本文件中使用,其他文件不能使用
3>static修饰的局部变量只会初始化一次,并且在程序退出时才会回收内存
10 属性readwritereadonlyassignretaincopynonatomic 各是什么作用,在那种情况下用? 
assign用于简单数据类型,如NSInteger,double,bool,
retain和copy用于对象,
readwrite是可读可写特性;需要生成getter方法和setter方法时
readonly是只读特性  只会生成getter方法 不会生成setter方法 ;不希望属性在类外改变
assign是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时;
retain表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1;
copy表示赋值特性,setter方法将传入对象复制一份;需要完全一份新的变量时。
nonatomic非原子操作,决定编译器生成的setter getter是否是原子操作,atomic表示多线程安全,一般使用nonatomic
11堆和栈
1>堆空间的内存是动态分配的,一般存放对象,并且需要手动释放内存
2>栈空间的内存由系统自动分配,一般存放局部变量等,不需要手动管理内存
12
1>loadView
Ø当第一次使用控制器的view时,会调用loadView方法创建view
Ø一般在这里自定义view

2>viewDidLoad
Ø当控制器的view创建完毕时会调用,也就是在loadView后调用
Ø一般在这里添加子控件、初始化数据

3>viewDidUnload
Ø当控制器的view因为内存警告被销毁时调用
Ø一般在这里回收跟界面相关的资源(界面都会销毁了,跟界面相关的资源肯定不要了)

4>ViewController的didReceiveMemoryWarning是在什么时候调用的?默认的操作是什么?

Ø当应用程序接收到系统的内容警告时,就有可能调用控制器的didRece…Warning方法
Ø它的默认做法是:
l当控制器的view不在窗口上显示时,就会直接销毁,并且调用viewDidUnload方法
 
13 线程  延迟
1>创建线程的方法
ØNSThread
ØNSOperationQueue和NSOperation
ØGCD
2>主线程中执行代码
Ø[self performSelectorOnMainThread: withObject: waitUntilDone:];
Ø[self performSelector: onThread:[NSThread mainThread] withObject: waitUntilDone:];
Ødispatch_async(dispatch_get_main_queue(), ^{
});
3>延时执行
Ødouble delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 
(int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){        
});
Ø[self performSelector: withObject: afterDelay:];
Ø[NSTimer scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:];
14
1.Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?

Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。

16
id 声明的对象具有运行时的特性,即可以指向任意类型的objcetive-c的对象;
32位下  NSInteger   其实就是  int。 64位下是  long。
32位时直接把  NSInteger  当  int  用就是了,64位时要考虑范围问题。NSInteger与int的区别是NSInteger会根据系统的位数(32or64)自动选择int的最大数值(int or long)。
 
posted @ 2016-01-06 14:47  kunzir  阅读(644)  评论(0编辑  收藏  举报