知识点

2016-10-23  本文已影响20人  桃逸

参考:
Apple Developer
Apple OpenSource

1. 基础知识点:

Cocoa Touch

是apple基于手机触摸的一套基础框架,包括音频视频,数据管理,网络,用户应用等框架;
查看官方文档说明

>> runtime运行时原理

runtime是一套比较底层的纯C语言API,我们平时编写的OC代码中, 程序运行过程时, 其实最终都是转成了runtime的C语言代码;
利用runtime机制让我们可以在程序运行时动态修改类、对象中的所有属性、方法;
用处:

GCD (Grand Central Dispatch)

GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。一个任务可以是一个函数(function)或者是一个block。 GCD的底层依然是用线程实现,不过这样可以让程序员不用关注实现的细节;
常用函数:
dispatch_async dispatch_group_async dispatch_barrier_async dispatch_apply

APNS (Apple Push Notification service)

APNS的消息注册跟消息吹都在AppDelegate中处理,使用:
didRegisterForRemoteNotificationsWithDeviceToken
didReceiveRemoteNotification
相关application函数;

工作原理:

NSZone

可以想象成一个内存池,alloc与dealloc这些操作,都是在这个内存池中操作的,cocoa总是会配置一个默认的NSZone,任何默认的内存操作都是在这个zone上操作的;
默认的NSZone是全局的,时间一长,必然会导致内存碎片化,如果大量的alloc一些object,那么性能就会收到影响;所以cocoa提供方法,你可以自己生成一个NSZone,并将alloc,copy全部限制在这个zone之内;

>> 数据存储

>> 沙盒

http://www.cnblogs.com/luckhao/p/5437896.html
沙盒目录结构

Paste_Image.png
文件存储

NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSString *fileName = [path stringByAppendingPathComponent:@"123.plist"];

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults synchronize];

偏好设置会将所有数据保存到同一个文件中。即preference目录下的一个以此应用包名来命名的plist文件;

数据库存储:
  1. SQLite 轻型嵌入式关系数据库,包含在一个相对小的c库中,基于C的API操作;
  2. CoreData:对象关系映射(ORM),它将数据库的创建,表的创建,对象与表的转换操作等封装起来,简化了我么的操作;开发者只要把模型搭建起来,具体数据库如何创建不用管,在IOS项目中添加“Data Model”文件;
  3. 第三方架构FMDB: 相比于SQLite3来说Core Data存在着诸多优势,它面向对象,开发人员不必过多的关心更多数据库操作知识,同时它基于ObjC操作,书写更加优雅等。
多线程访问数据同步?
OC与Swift混编

后台多任务管理机制

http://www.zhihu.com/question/21192280

Paste_Image.png
响应链

系统会根据hittest来处理将定位消息属于具体哪个窗口;
能响应对象的都是UIResponse的子对象;
app接受的响应会逐级传递寻找响应, 形成一个响应链,例如一个事件响应链:
AppDelegate --> UIApplication --> UIWindow --> UIViewController --> UIView --> UIButton
使用nextResponder函数可以循环获取父级响应对象;
用户的一个点击事件信息包括:UITouch和UIEvent;

keychain(Security.framework)

它是一个在所有app之外的sqlite数据库;
Keychain的信息是存在于每个应用(app)的沙盒之外的,所以keychain里保存的信息不会因App被删除而丢失,在用户重新安装App后依然有效,数据还在;
NSUserDefaults存储是不安全的,简单的信息存储使用NSUserDefaults即可,但是对于安全性要求比较高的信息,比如账户密码等;
基本函数:SecItemAdd/SecItemUpdate/SecItemCopyMatching/SecItemDelete

100个知识点汇总
http://www.csdn.net/article/2015-01-19/2823604-ios-interview-questions

类的load与initialize静态函数作用

这两个静态方法是可选的,且只有在实现了他们时才会被调用;


2. 内存与多线程知识点

多线程

内存管理
http://www.jianshu.com/p/dba7e8010cd3
自动释放池块与线程
使用局部自动释放池块降低最大内存占用率


3. UI知识点:

Core Animation / Core Graphics
CALayer *layer = [CALayer layer];
CABasicAnimation *animation = [CABasicAnimation animation];
animation.keyPath = @"transform.scale";
animation.toValue = @0;
[layer addAnimation:animation forKey:nil];

CA动画基础参考:http://www.jianshu.com/p/8c1c1697c0ce

CGContextRef context = UIGraphicsGetCurrentContext();  
NSString *str1 = @"画线";  
[self drawText:str1 atPoint:CGPointMake(20.0, 20.0) FontSize:15];
CGContextScaleCTM(context, 1.0, -1.0);  
CGContextSaveGState(context);
CGContextRestoreGState();

每一个 UIView 都有一个 graphics context (绘图上下文),在设备硬件显示前,绘制的所有视图都会被渲染到这个上下文中;
iOS 在任何时候需要更新视图都是通过调用 drawRect 方法;
参考学习:http://www.tuicool.com/articles/jaM7zmN

UIView本身更像是一个一个CALayer的管理器

把UIView看做图片的话,layer就像是一个图层,一个图片是由很多个大小不同的有层次的图层构成的 uiview也是

UITableView 复用机制

UITableview通常只会显示当前页面最大可显示cell个数加1,cell离开屏幕后会从队列中删除;

imageNamed

使用imageNamed方法创建UIImage对象时,图片会自动加载到系统缓存中不再释放,会使内存增大

UIImageView圆角

如何提高调价圆角的性能?

UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale);
[[UIBezierPath bezierPathWithRoundedRect:RECT cornerRadius:RADIUS] addClip];
[image drawInRect:RECT];
UIImage* imageNew = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();

key window是?

可接收键盘输入等事件的UIWindow,官方文档如是说:
The key window is the one that is designated to receive keyboard and other non-touch related events. Only one window at a time may be the key window.
使用 makeKeyAndVisible让一个 UIWindow 变成 key window;
程序主窗口是:[[[UIApplication sharedApplication] delegate] window];

pushViewController 与 presentViewcontroller
上一篇下一篇

猜你喜欢

热点阅读