iOS 面试题总结

来源:互联网 发布:电脑管家的数据恢复 编辑:程序博客网 时间:2024/05/20 22:02

基础但是重要

1,static关键字至少有下列n个作用:

1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;

 2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;

3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;

4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;

5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。


2,

我们的app不出意外都需要更新,完善,发布新版本。那么当新版本出来之后,怎么提醒用户进行升级呢?哪种提醒方法比较好,容易让用户升级应用呢?我在这总结了四个方法:

1. 服务器发送通知的方式。

当有新版本时,由服务器向所有用户发送通知,提醒用户进行更新。

好处:用户下载应用之后,即使一次也没使用过,也可以接收到通知,然后进行版本更新。

坏处:1)可能用户已经更新了新版本,可还是收到了有新版本的提示。

         2)如果用户关闭了接收push通知,那么即使服务器push了一个新版本提示,用户也收不到。


2.本地通知的方式。

此处,我建议在应用进入后台的时候再检查有无新版本,然后发送本地通知。因为用户在使用app的时候,并不希望被打断,或者并不希望此时升级。因为升级过程中,他不能使用该app.

方法:服务器提供一个访问现有版本的接口,当应用进入后台的时候,本地代码可以每隔一段时间(1天,或者3天,或者1个礼拜(不能一进入后台就访问接口))去访问服务器获取当前应用的版本,如果有更新,则弹出对话框提醒用户进行更新,此时用户更愿意更新,因为此时更新不影响用户使用现有app

好处:不影响用户使用app,是在用户暂时不用app的时候进行更新,用户更愿意选择更新版本。

坏处:不能及时更新版本。


3.服务器提供一个接口,访问接口(在使用应用中间(比如进入某个模块,这个模块调用此接口))进行提醒更新

好处:及时。用户可以很及时的更新新版本。

坏处:是用户在使用app中间收到提示,此时一般都不愿意更新新版本。


4、另外,友盟有自动提醒的功能,利用友盟推送可以实现版本更新

     优缺点同方案一。

      实现方法:在网站上分渠道提交app版本号,更新日志及openURL,然后只需添加一行代码来完成自动更新检查。具体实现请看:http://dev.umeng.com/auto-update/ios-doc/integration


我是建议使用本地通知的方式。

3,RUN Loop是什么?

1runloop是事件接收和分发机制的一个实现。

2。什么时候使用runloop

当需要和该线程进行交互的时候。主线程默认有runloop。当自己启动一个线程,如果只是用于处理单一的事件,则该线程在执行完之后就退出了。所以当我们需要让该线程即监听某项事务事,就得让线程一直不退出,runloop就是这么一个循环,没有事件的时候,一直卡着,有事件来临了,执行其对应的函数

3 run loop需要处理的event source有两种:input sources(常是其他线程的异步的event) timer sources(定时器)。

 Runloop是事件接收和分发机制的一个实现。 Runloop提供了一种异步执行代码的机制,不能并行执行任务。

在主队列中,Main RunLoop直接配合任务的执行,负责处理UI事件、定时器以及其他内核相关事件。

RunLoop的主要目的:

    保证程序执行的线程不会被系统终止。   

什么时候使用Runloop

    当需要和该线程进行交互的时候才会使用Runloop.

    每一个线程都有其对应的RunLoop,但是默认非主线程的RunLoop是没有运行的,需要为RunLoop添加至少一个事件源,然后去run它。

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

    主线程默认有Runloop。当自己启动一个线程,如果只是用于处理单一的事件,则该线程在执行完之后就退出了。所以当我们需要让该线程监听某项事务时,就得让线程一直不退出,runloop就是这么一个循环,没有事件的时候,一直卡着,有事件来临了,执行其对应的函数。

    Runloop,正如其名所示,是线程进入和被线程用来响应事件以及调用事件处理函数的地方。需要在代码中使用控制语句实现run loop的循环,也就是说,需要代码提供while或者 for循环来驱动run loop

    在这个循环中,使用一个Runloop对象[NSRunloop currentRunloop]执行接收消息,调用对应的处理函数。

    Runloop接收两种源事件:input sourcestimer sources

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

    timer sources(定时器传递同步事件(重复执行或者在特定时间上触发)。

    除了处理input sourcesRunloop也会产生一些关于本身行为的notificaiton。注册成为Runloopobserver,可以接收到这些notification,做一些额外的处理。(使用CoreFoundation来成为runloopobserver)。

Runloop工作的特点:

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

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

    3> 当事件再次发生时,Runloop会被重新唤醒,处理事件。

提示:一般在开发中很少会主动创建Runloop,而通常会把事件添加到Runloop中。



0 0
原创粉丝点击