1. #import的作用
#import 防止头文件重复包含
2.面向对象和面向过程的区别
面向过程:注重的是解决问题的步骤
面向对象:关注的是解决问题的需要哪些对象
3.对象和类方法的区别
对象:以减号开头
只可以被对象调用,可以访问成员变量
类:以加号开头
只能用类名调用,对象不可以调用
类方法不能访问成员变量
4.self 与 super区别
self代表着当前方法的调用者
super是一个编译指令可以直接调用当前父类方法
当前类的父类的调用者
super在类方法中,它就代表了调用当前类方法的类的父类,如果在对象方法中,它就代表调用当前对象方法的对象的父类对象
5.继承和多态
当调用方法时,首先检测子类有没有实现这个的方法,如果子类没有重写这个方法,就会调用父类的方法
重写:子类重新实现父类的方法
6.多态:多态就是某一类事物的多种形态.多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作
7.点语法就是用来调用set和get的方法
8.@property 和 @synthesize
Xcode 4.4前:自动生成set和get声明方法
Xcode 4.5后:自动生成set和get的声明和实现方法 在.m文件中生成下划线开头的成员变量
在Xcode 4.4前自动生成set和get方法的实现
在Xcode 4.4可以不写
9.内存管理
管理范围:任何继承于 NSObject的对象
原理:
每一个对象都有引用计数器
当使用alloc new 和 copy创建对象时引用计数器被设置为1
给对象发送一条retain消息 ,引用计数器加1 —
给对象发送一条relrase消息,引用计数器会减1
计数器为0时,对象会被回收
只要用alloc new创建新对象,那么你就有责任做一次release
不可以再操作已经被释放的对象,不然会发生野指针错误
在对象释放前操作对象
你想使用某个对象,就应该放对象的计数器+1
你不想使用某个对象,就应该让对象的计数器-1
成员变量内存管理(如果成员变量是对象,才需要管理)
哪里有 alloc new 哪里有 release
release 旧对象
retain新对象
dealloc 方法就是释放当前拥有的所有对象
nonatomic:性能高 多线程不加锁
atomic 性能低,多线程加锁
autorelease 会将对象放到一个自动释放池中
当自动释放池被销毁,会将池里的所有对象的一次release操作
10.分类(category)在不改变类的情况下给一个类动态添加方法,可以访问原来的成员变量和方法,但不可以添加成员变量
继承有: 封装 继承 多态 子类继承父类的属性和行为
11.协议protocol
一些方法的声明
遵守某个协议,只要遵守这个协议,就就相当于拥有了这个协议里面所有的方法和声明
@required是必须实现
@optional 可以选实现
分类和协议只能声明方法,不可以声明变量
NSObject是基类协议
12.block的作用:封装代码09,用来保存一段代码
block 内部可以访问外面的变量
默认情况下,block 内部不能修改外面的局部变量
给局部变量加上_block,这个局部变量就可以在block内部改变
13.@class 和 #import的区别
@class做一个简单的声明,并不包含 类方法的声明和成员变量的声明
@import 是把整个类的所有声明都拷贝一份
@import和@class同时在.h 和 .m中可以解决循环依赖的问题
循环retain
两个类相互包含,就会出现无法释放的问题 一边用retain 另一边用assign
15.static 修饰局部变量时增加生命周期,在程序退出时才会销毁
16.id 和 instancetype的区别
id能作为方法或函数的返回值 参数值 也可以用来定义变量
instancetype 只能作为函数或者方法的返回值
instancetype对比id的好处就是:能精确的限制返回值的具体类型
16.重写:子类继承父类会继承的方法,方法名不变重新写自己的实现
注意:1.父类必须声明子类的成员变量
2.子类不能拥有和父类的相同的成员变量
3.调用对象的方法,在当前找 找不到会到父类中找 找不到到NSObjet 没有就报错;
17.数组的定义使用与特点
数组中类型一旦确定,不可以更改
数组的长度是固定的
18.ARC的特点
不允许调用 release retain retainCount
允许重写dealloc 但是不允许调用[super dealloc]
@property的参数
strong 成员变量是强指针,相当于与原来的retain
weak:成员变量的弱指针,相当与原来的 assign
assign:适用于非oc 的对象类型
19.SEL
每一个类的方法列表都是储存在类的对象中
根据医改SEL对象就可以找到方法的地址,进而调用方法
20.copy语法的目的就是改变副本,不影响源对象
深拷贝:内容拷贝,会产生新的的对象,新的对象的计数器值为1,源对象不变.
浅拷贝:指针拷贝,是不会产生新的对象,源对象的计数器值为+1.
除了 不可变 调用copy是浅拷贝,其他都是深拷贝. |
|