回调机制
1)目标动作:当两个对象之间有比较紧密的关系,如视图控制器与其下的某个视图;
2)代理:委托,当某个对象收到多个事件,并要求同一个对象来处理所有事件时,委托机制依赖于某个协议定义的方法来发送消息
3)通知机制:当需要多个对象或两个无关对象处理同一个事件时
4)block:适用于回调只发生一次的简单任务
堆和栈的区别?
管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。
申请大小:栈:栈是向低地址扩展的数据结构,是一块连续的内存的区域
堆:是向高地址扩展的数据结构,是不连续的内存区域。
分配方式:堆都是动态分配的 ,动态分配由alloca函数进行分配
栈的动态分配由编译器进行释放,无需我们手工实现
线程和进程的区别?
答:主要不同的是操作系统资源管理方式
线程是一个进程中不同的执行路径,线程有自己的堆、局部变量
进程有独立的地址空间,一个线程死掉,整个进程就会死掉
单例模式
一个类只有一个实例
(1) static id _dataTool;//创建一个全局实例,用static保护起来;
(2) + (instance)allocWithZone:(struct _NSZoene *)zone;
(3) + (instance)sharedDataTool;
(4) - (instance)copy;
内存管理的几条原则
谁申请谁释放
new alloc copy
创建线程的方法
NSThread, 使用GCD的dispatch,使用子类化的NSOperation,
主线程 dispatch_async(dispatch_get_mainThread...)
KVC key-value-code 键值编码,通过指定 表示要访问的 属性名字的字符串,进行属性的读取和设置
KVO 键值监听,监听属性的变化
1、用预处理指令#define声明一个常数,用以表明1年的秒数(365天)
# define SECONDS_PER_YEAR (365*24*60*60)UL
末尾加UL,16位机的整形数会溢出,因此要加L,UL无符号整型
2、写一个标准宏MIN,输入两个参数并返回较小的一个
define MIN(A,B) ((A)>(B)?(B):(A))
3、写一个委托interface
@protocal MyClassDelegate <NSObject> //NSObject为基本类根类也为基协议,可以写也可以不写
@optional //@required
- (void) doSomething;
@end
@interface MyClass: NSObject
@property(nonatomic, weak) id<MyClassDelegate> delegate;
@end
4、
没有多重继承,委托,类别和扩展来实现
9、const, 只读,常,保护哪些不希望被改变的参数,加const 类的成员函数,表明其实一个常函数,不能修改类的成员变量;
static 局部变量,变量只需初始化一次,它的生命周期和全局变量一样,作用域只能是函数内部;
static 全局变量 , 避免该变量被其他文件用extent引用修改;
static函数
在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。
extern "C"后,会指示编译器这部分代码按C语言的进行编译,
10、volatile 易改变的,每次使用一个变量总是重新读取这个变量的值,而不会从寄存器读取备份的:
并行设备的硬件寄存器;
一个中断服务子程序中会访问到的非自动变量
多线程应用中被几个任务共享的变量
11、#import 引入头文件,避免头文件被重复引用,OC
#include 引入头文件,不能避免头文件被重复引用
@class 声明,没有引入头文件
12、MVC模式
M: Model 数据,数据来源,数据模型
V: View 视图,与用户交互的视图界面
C: Controller 控制器 总管家
控制器作为总管家,数据和视图不要跳过C直接通信;
M和C,C可以直接读取M的数据,M可以通过通知和KVO机制与C进行通信;
M和V,M通过outlet修改V的数据,V通过action来与C通信,按钮的点击事件等等
13、线程与进程的区别和联系
进程:系统中正在运行的程序,一个进程至少有一个线程,进程有独立的空间,一个进行奔溃,在保护模式下不会对其他进程有影响
线程:进程的一次任务执行,同一个进程的线程共享进程的资源
15、堆和栈的区别
栈是由编译器自动管理,
堆,释放需要程序员控制,容易产生内存泄露
16、键值
key value
KVC 键值编码,通过字符串的访问属性,
键路径,点分割,指定任意深度的路径,使其指向相关对象的特定属性
17、目标-动作机制
目标是动作消息的接受者
18、cocoa touch 框架
iPhone 开发的基础框架,UIKit,实现图形,事件驱动程序
图形和动画, 音频视频,网络
23、单例模式
一个类只有一个实例
static id _soundTool;
+ (instancetype) allocWitchZone: (struct _NSZone *)zone {
//避免重复加锁
//加锁
//避免多线程
if (_soundTool == nil){
@synchronized(self){
if(_soundTool == nil){
_soundTool = [super allocWithZone:zone];
}
}
}
return _soundTool;
}
+ (instancetype) sharedSound {
dispatch_once_t...
_soundTool = [[super alloc]init];
....
return _soundTool;
}
- (instancetype) copy {
return _soundTool;
}
24、动态绑定
在objective-c中,调用指定的方法不是由编译器决定而是由运行时决定,这被称作是方法的动态绑定
25、OC优缺点
类别:添加新的方法
动态识别:属性和方法不是由编译器决定而是由运行时决定的
缺点:
不支持命名空空间;
不支持运算符重载
不支持多重继承
27、
int a;
int *a;
int **a;
int a[10];
int *a[10];
int (*a)[10];//一个指向10个整型数数组的指针
int (*a)(int);//一个指向函数的指针
int (*a[10])(int);
28、
assign setter方法直接赋值,不进行任何retain操作,
retain release旧指,retain新值
copy release旧指, copy新值
nonatomic,非原子2,不加锁,iPhone开发
29、UITableView
dataSource
@required
行数
设置cell
@optional
组数
delegate:
选中cell触发
设置行高