日常笔记
是转载,寻不得出处了。
1、对比:alpha 、opaque、hidden
-
alpha
是用来描述改view的透明度从0到1,0表示的是透明,1表示不透明。 - alpha支持动画(animation),
- 并且hidden和
apaque
不支持动画。 - alpha = 0 与 hidden = YES 效果一样都是看不到view,但是后者相比开销大。
- 在
alpha
等于0时view接受touch事件,但是hidden则不接受。 - alpha并不影响镶嵌在其内部view行为,而hidden会影响。
- 当把view设置为透明背景时,一般把
opaque
设置为NO,可以减少开销,优化内存.opaque影响图形绘制系统。设置为YES,会优化view的绘制。
2、nil、NSNUL、,NULL区别
- nil是指向Objective-C中对象的空指针,是一个对象,在Objective-C中ni对象调用方法不会引起crash。
- Nil是指向Objective-C中的类的空指针,表示的是一个空类。
- NULL是指向任何类型的空指针(如c/c++中的空指针),在Objective-C中是一个数值。
- NSNULL用于集合操作,在集合对象中,表示一个空值的集合对象。
3.NSThread、NSOperation、GCD
NSThread,NSOperation,GCD是IOS中使用多线程的三种方式之一。他们各有优缺点。抽象层次是从低到高的,抽象度越高的使用越简单。
- NSThread,缺点:需要自己维护线程的生命周期和线程的同步和互斥,但是这些都需要耗费系统的资源。优点:比其它两个更轻。
- NSOperation,优点:不需要自己管理线程的生命周期和线程的同步和互斥等。只是需要关注自己的业务逻辑处理,需要和NSOperationQueue一起使用。
- GCD,是Apple开发的一个多核编程解决方法,优点:比前面两者更高效更强大。
4、copy 和 retain区别
- retain,相当于指针拷贝。变量的引用计数加一。另外一个指针也指向改地址。
- copy,相当于内容拷贝。变量的引用计数加一。但是自己本身计数不变。开辟另外一个地址空间放入相同变量的值进去。
5、数据持久化:core Data、sqlite、file、NSUserDefaults、keychain
Core Data,sqlite涉及到数据库。
- sqlite需要通过sqlite语句操作数据库,
- core data是Apple提供的一个基于sqlite更抽象成对象的一种对数据库操作方式。
- file,主要是把数据存储在磁盘中。通过写和读文件操作。
- NSUserDefaults,主要是存储应用程序中的一些轻量级数据如应用程序的设置和属性和用户信息等。
- keychain 钥匙串:我们使用NSUserDefaults存储数据信息,但是对于一些私密信息,但是对于一下比较私密的信息,如帐号、密码等等,我们就需要使用更为安全的keychain了。keychain保存的信息是保存在沙盒之外的,不会因App的删除而丢失,在用户重新安装了App后依然存在。其实可以把keychain理解成一个Dictionary,所有数据都以key-value的形式存储,可以对这个Dictionary进行add、update、get、delete这四个操作。对一个应用来说,keychain都有两个访问区,私有和公共。
6、应用程序的生命周期和状态
(参照:http://blog.csdn.net/totogo2010/article/details/8048652)
- Not running 未运行 程序没启动
- Inactive 未激活 程序在前台运行,不过没有接收到事件。在没有事件处理情况下程序通常停留在这个状态
- Active 激活 程序在前台运行而且接收到了事件。这也是前台的一个正常的模式
- Backgroud 后台 程序在后台而且能执行代码,大多数程序进入这个状态后会在在这个状态上停留一会。时间到之后会进入挂起状态(Suspended)。有的程序经过特殊的请求后可以长期处于Backgroud状态
- Suspended 挂起 程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中的,当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。
各个程序运行状态时代理的回调:
-
(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当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。
-
(void)applicationWillTerminate:(UIApplication *)application当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。
-
(void)applicationDidFinishLaunching:(UIApplication*)application
网友评论