基础但是重要
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是什么?
1。runloop是事件接收和分发机制的一个实现。
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 sources和timer sources。
input sources 传递异步事件,通常是来自其他线程和不同的程序中的消息;
timer sources(定时器) 传递同步事件(重复执行或者在特定时间上触发)。
除了处理input sources,Runloop 也会产生一些关于本身行为的notificaiton。注册成为Runloop的observer,可以接收到这些notification,做一些额外的处理。(使用CoreFoundation来成为runloop的observer)。
Runloop工作的特点:
1> 当有事件发生时,Runloop会根据具体的事件类型通知应用程序作出响应;
2> 当没有事件发生时,Runloop会进入休眠状态,从而达到省电的目的;
3> 当事件再次发生时,Runloop会被重新唤醒,处理事件。
提示:一般在开发中很少会主动创建Runloop,而通常会把事件添加到Runloop中。