1、oc基本语法
1:属性关键字,使用和意义
@property()括号里面关键字
nonatomic/atomic 前者是线程unsafe,后者是线程 safe 默认是atomic,生成的setter方法会加锁 nonatomic禁止多线程,提高性能
assgin/retain/copy/strong/retain
assgin直接赋值,引用计数不增加
retain 保留赋值,引用计数加1 只是保留指针
copy 拷贝,引用计数加1 在堆上开辟一块内存,只对实现了NSCopying协议有效
strong/weak 强引用和弱引用 强引用是一个强指针 如果这个指针不消失,所指向的对象不会消失,反之弱引用就会消失,强引用好比人和人影子
__strong/__weak/__unsafe_unretained用来修饰变量
readWrite/readOnly
readwrite是给提供个成员变量的访问权限,可读可写,默认属性
readOnly:只读权限,生成getter方法,并且没有get前缀
@class作用 引入头文件,但是不包含该类的信息,只是作声明。可以极大地提高编译效率,防止编译错误
#import 包含该类的所有信息,包括实体变量和方法
@interface作用是声明一个类,类似于java的接口,在 @ interface声明的变量 只能在该类中访问,property中声明的可以外部调用。
import防止重复引用
2:isa/self/super作用
isa:每一个对象都有一个isa指针,指向元类
self:当前调用方法的类
super:调用父类的方法
3、代理,通知,类目,延展
1:代理 某一个类要完成某个功能,但是他不能去完成,他指定一些方法,可以是可选择实现也可以是必须实现的,当他指定一个delegate做的时候,这个deelgate就是一个代理。
2:通知,一对多,观察者向消息中心注册该消息,就可以接收到其他对象发送过来的消息。有一个通知中心发出,通过不同的标示来区分,当在某处按照该标示进行监听的时候,可以获取到消息的信息,消息在不需要的时候需要释放。
3、类目是类的扩展,可以在已知的类中添加新的方法,但是不能添加变量,类目中的方法优先级高于原始类中的方法,如果原始类中的方法名称和类目中的方法名称相同,那么该方法会被覆盖。
注:关联引用,是在运行势态的时候,允许为已经存在的类中添加自定义属性,通常建议添加的属性石static char类型的。
4、延展,在类中的添加的私有方法和变量,并且是必须要实现的。
4:set/get方法
5:kvo/kvc原理和使用
KVC:键值编码,使用键而不是属性去访问变量。
KVO:键值观察者,提供了一个对象的属性发生改变,可以通知当前对象的机制。
6:block是什么,使用要注意的地方
block(闭包):闭包是能够读取其他函数内部变量的函数。建立在栈上,默认情况在闭包内变量被copy一份,所以无法改变变量,加上__block可以修改变量
GCD和代理:GCD使用block闭包方式代替委托,代码集中简洁,回调在闭包里面完成。
在ARC中使用__weak防止block
7:深拷贝,浅拷贝
深拷贝:深拷贝是对象拷贝,浅拷贝是指针拷贝,比如说,深拷贝一个对象会在堆上重新申请一块内存,两个指针和内容都是相同的。浅拷贝的话就是拷贝该对象的指针,指向的都是同一块内存。copy和mutablecopy,copy是不可变的,mutablecopy是可变的,所以当使用copy的时候生成的对象是不可变的,相当于retain,而使用mutablecopy拷贝的对象都是深拷贝。是重新生成的对象,不然就不能改变。
8:常见数据类型,可变和不可变类型,自定义对象
常见数据类型,int,float,double,long,ios的封装的数据类型,NSInteger,CGFloat等。
自定义对象的归档,需要实现NSCoding协议。
9:ARC和非ARC内存管理
非ARC内存管理:使用alloc,new,copy生成一个对象,当不需要使用该对象的时候有义务释放它,原则是谁拥有,谁释放。引用计数为0的时候,系统会自动调用dealloc释放内存。
ARC是ios5.0之后引入的,原理是在编译期间,自动插入retain/copy/release/autorelease。
10:封转、继承、多态
封装:高度抽象出来,只暴露接口和需要的参数,不需要显示内部实现机制。
继承:子类继承父类所有的东西,包括方法,属性。
多态:不同的对象响应相同的方法称为多态。
11:单例模式
单例,保证在整个应用程序中只生成一个唯一的对象,并且很容易让外界所访问,减少了alloc的开销,提高了传递的效率。
2、SDK常用api使用
1:UITableViewCell重用机制
cell的重用机制,通过指定一个identifier区分不同的cell,可以使用已经创建的cell,包括cell上的子视图,当重用cell的时候,会将之前的数据清空,重新赋值,减少cell的内存开销,保证了UITableView的滑动流畅性。
2:NSTimer
1、NSTimer并不精确
2、NSTimer需要添加到runLoop运行才会执行,但是这个runLoop的线程必须是已经开启。
3、NSTimer会对它的tagert进行retain,我们必须对其重复性的使用intvailte停止。
3:coreText
4:LocationManager
5:远程通知/本地通知NSLocalNoition
远程推送:APNS(apple provider noticifition sevice)苹果提供的推送服务,原理是,在应用加载的时候注册推送服务,获取apple返回的token,将token发送给指定的服务器,服务器拿着这个token发送通知给apple,苹果将这个通知推送给指定token的设备。
本地通知:先注册本地通知,通过设定一段时间触发这个预先的通知。
6:AVAudioPlayer/MPMoviePlayer
AVAudioPlayer:只能播放一个完整音频,不能播放流式播放,所以需要播放网络音频时候需要使用音频队列。
AVPlayer:可以播放本地和流音频
AudioQueue:音频队列,通过队列分配内存空间,先缓存音频,再使用缓存的音频。
7:UIScrollView/UICollectionView/UIPageViewControoller
8:下拉/上拉机制
9:runtime机制
runtime运行时系统,是object-c运行赖以依靠的基础。发送消息为例子,在编译阶段,并不知道方法是否被实现了,而是在运行时候才会执行。
10:UIGesturer/UITouch/UserInterface
11:UITabBarController/UINavgationBarController
12:应用程序生命周期/UIViewController生命周期
ViewController程序生命周期:alloc创建分配内存、init初始化数据,可用、loadView视图加载,如果重写必须要创建一个view。viewDidLoad视图加载完成,可以将一些subViews的添加在这里处理。viewWillAppear视图将要出现,处理一些过渡动画。viewDidAppear,视图已经出现。viewWillDisApear视图将要消失,viewDidDisApear视图已经消失。Dealloc释放一些对象,释放空间。
应用程序生命周期:DidLoad应用程序加载完成。
3、网络层,多线程,数据解析,数据存储,异常处理
1:异步网络请求,NSUrlConnection/ASI/AF/MK
2:NSOperation和GCD
3:json和xml解析,RestKit
4:UserDefalut,NSFile,NSArchive,coreData,sqlite
4:、UIView动画,core animation动画,使用示例,原理
1:UIView基本动画/带block动画
2:CAShapLayer动画
3:CA映射动画
4:贝塞尔曲线/CAKey关键帧动画/CATrans/CABase
5、画图,drect,drectPoint,drectImage,常用的画图方式,原理
1:drect只调用一次,手动调用setNeedsLayout会自动调用drect,如果view的frame为空,不会调用drect方法,设定view的model可以一直调用drect
2:layOutSubViews在frame改变的时候会调用
3:可以指定一块区域画点/画图/ 指定圆心,半径,幅度,起始点,颜色,阴影,透明度,渐变
6:Xcode的使用,内存instrument,debug
7、常用的第三方库使用有哪些
1:图片加载SDWebImage
2:AFNetWorking/ASIHttpRequest/MKNetWorking
3:SVProgressHUD
4:RestKit
5:RNCacheingUrlProtocol
6:webViewBridge
7:JsonKit
8:storybord使用
1:指定一个mainController
2:suger,指定一个identifier
3:使用NSContrant限制
4:注意不要多人修改
9、git使用
1:git环境搭建
2:git 初始化
3:git 关联远程库
4:git 常用命令,add commit push pull stash reset merge branch log remote ...
10、要你自己实现一个框架给别人使用,思路
11、实现一个缓存方案
12、侧滑的实现思路
杂谈:1、看过的技术书教程
1:Objective-C 2.0
2:iOS并发编程
3:Programming ios5
4:iphone开发基础教程
5:WWDC session
6:python基础教程