2。iOS基础知识—回顾

iOS面试 | 基础知识 | <1>

2016-09-22  本文已影响73人  Manba_小洛
1.简述OC中内存管理机制
2.readwrite,readonly,assign,retain,copy,nonatomic,atomic,strong,weak的作用?
3.类变量的@protected,@private,@public,@package,声明各有什么含义?
4.线程是什么?进程又是什么?区别和联系.
5.对多线程开发的理解,iOS中有几种实现多线程的方式.
dispatch_queue_t q = dispatch_queue_create(“qqq”,DISPATCH_QUEUE_SERIAL);//创建一个串行队列
dispatch_sync(q,^{
 
});//开启同步任务
dispatch_async(q,^{
});//开启异步任务
并行队列:DISPATCH_QUEUE_CONCURRENT
主队列:dispatch_queue_t q = dispatch_get_main_queue();
全局队列:dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

NSThread
获取当前线程:NSThread * current = [NSThread currentThread];
获取主线程:NSThread * main = [NSThread mainThread];
使用NSThread创建线程的两种方式:

- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;
+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument; 

暂停当前线程:
[NSThread sleepForTimeInterval:2];
NSOperationQueue
创建一个操作队列:NSOperationQueue * queue = [[NSOperationQueue alloc]init];
添加NSOperation到NSOperationQueue中:[queue addOperation:operation];
添加一组operation:[queue addOperations:operations waitUntilFinished:NO];
添加一个block形式的operation:[queue addOperationWithBlock:^(){
}];
添加NSOperation的依赖对象:[operation2 addDependency:operation1];
设置队列的最大操作数:[queue setMaxConcurrentOperationCount:1];
等待options完成:[operation waitUntilFinished];
暂停、继续queue:[queue setSuspended:YES] [queue setSuspend:NO]

6.线程同步和异步的区别?ios中如何实现线程的同步?
7.iOS类是否可以多继承,如果没有,怎么实现?
8.栈和堆的区别?
9.iOS本地数据存储都有几种方式?
10.ios动态类型和动态绑定
11.深拷贝和浅拷贝的理解.
NSMutableDictionary  * dic = [@{} mutableCopy];
NSMutableArray  * ary = [@[] mutableCopy];
12.怎么实现一个singleton的类.
static SortDetailsModelDown * single = nil;
+(SortDetailsModelDown *)shareSortDetailsModelDown { 
    @synchronized(self){
         if (!single) { 
              single = [[SortDetailsModelDown alloc]init];            } 
} return single;
}

13.什么是安全释放?

先释放再置空.

14.RunLoop是什么?

事件循环,是线程里面的一个组件.主线程的RunLoop是自动开启的.分为:计时源(timer source),事件源(输入源):input source.防止CPU中断(保证程序执行的线程不会被系统终止).

Runloop提供了一种异步执行代码的机制,并不能并行执行任务,是事件接收和分发机制的一个实现.每一个线程都有其对应的RunLoop,但是默认非主线程的RunLoop是没有运行的,需要为RunLoop添加至少一个事件源,然后run它.

一般情况下我们是没有必要去启动线程的RunLoop的,除非你在一个单独的线程中需要长时间的检测某个事件.

RunLoop,正如其名所示,是线程进入和被线程用来响应事件以及调用事件处理函数的地方.

input source传递异步事件,通常是来自其他线程和不同程序的消息.

timer source传递同步事件.

当有事件发生时,RunLoop会根据具体的事件类型通知应用程序作出响应.

当没有事件发生时,RunLoop会进入休眠状态,从而到达省电的目的.

当事件再次发生时,RunLoop会被重新唤醒,处理事件.

一般在开发中很少会主动创建RunLoop,而通常会把事件添加到RunLoop中.

15.什么是序列化和反序列化,可以用来做什么?如何在OC中实现复杂对象的存储.

序列化和反序列化:归档和反归档,进行本地化,进行数据存储.

CoreData:数据托管.有四种存储方式:xml,sqlite,二进制,内存.

遵循NSCoding协议之后,进行归档即可实现复杂对象的存储.

16.写一个标准宏MIN,这个宏输入两个参数并返回较小的一个.

define MIN(A,B) (A)>(B)?(B):(A)

17.iPhone OS 有没有垃圾回收机制,简易阐述一下OC内存管理.

木有.引用计数,ARC和MRC,swift(自动引用计数).

18.简述应用程序按HOME键进入后台时的生命周期,以及从后台进入前台时的生命周期.
//前者:HOME->后台
- (void)applicationWillResignActive:(UIApplication *)application
- (void)applicationDidEnterBackground:(UIApplication *)application
//后者:后台->前台
- (void)applicationWillEnterForeground:(UIApplication *)application     
- (void)applicationDidBecomeActive:(UIApplication *)application

//另:各个程序运行状态时代理的回调

//告诉代理进程启动但还没进入状态保存
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions

//告诉代理启动基本完成程序准备开始运行
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

//当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了
- (void)applicationWillResignActive:(UIApplication *)application

//当应用程序入活动状态执行,这个刚好跟上面那个方法相反
- (void)applicationDidBecomeActive:(UIApplication *)application

//当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可
- (void)applicationDidEnterBackground:(UIApplication *)application

//当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。
- (void)applicationWillEnterForeground:(UIApplication *)application

//当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。
- (void)applicationWillTerminate:(UIApplication *)application

//当程序载入后执行
- (void)applicationDidFinishLaunching:(UIApplication*)application

在上面8个方法对应的方法中键入NSLog打印。
现在启动程序看看执行的顺序:

Log[40428:11303] willFinishLaunchingWithOptions
Log[40428:11303] didFinishLaunchingWithOptions
Log[40428:11303] applicationDidBecomeActive
Log[40428:11303] applicationWillResignActive
Log[40428:11303] applicationDidEnterBackground
Log[40428:11303] applicationWillEnterForeground
Log[40428:11303] applicationDidBecomeActive
19.ViewController的 alloc,loadView,viewDidLoad,viewWillAppear,viewDidUnload,dealloc,init分别是在 什么时候调用?在自定义ViewController的时候这几个函数里面应该做什么工作?
20.描述应用程序的启动顺序.
上一篇 下一篇

猜你喜欢

热点阅读