在ios面试中,应试者经常遇到一些ios基础方面的知识,下面总结了一些经常遇到但很重要的知识.
第一个:内存管理(oc有垃圾回收机制, ios没有)
在UI中我们用内存引用计数来对内存进行管理;(遵循谁开辟,谁释放原则,内存引用计数要保持平衡) alloc, retain, copy等关键字会使内存引用计数立即+1;当对象使用结束后要对它进行释放 ,release(立即减1) ,autorelease(未来减1);autorelease的对象会把这个对象放置到离它最近的自动释放池里,自动释放池释放的时候才会把自动释放池中的所有对象的内存引用计数-1;当对象被添加到容器里时(如数组, 字典),内存引用计数+1; 从容器里移除时,内存引用计数-1.
第二个:类的扩展 (类的扩展主要有继承 类目 延展 协议)
1.类目 Category
命名 : @interface 要扩展的类名 (类目名) ~~ @end
特点 : 1.不可定义成员变量,而且一般不定义属性
2.可以添加方法,可重写原始类的方法,原始类的对象调用
2.延展 Extension
命名 : 写在.m文件里 @interface 类名 () ~~ @end
特点 : 1.添加类的私有属性和方法;
3.协议 Protocol(主要用于类与类之间通信常与deleate一起使用,一般使用属性定义)
命名 : @protocol 协议名 <NSObject> ~~ @end 方法可分为两种:@required 不写是默认的,必须实现 @optional 可实现可不实现
特点 :只声明,不实现 ;为了解决多继承问题 ;@property (nonatomic, assign) id<协议名> delegate, 此时用assign是为了防止循环拥有不能释放;
4. 继承为子类对父类的继承
特性 :1.继承为单向的,不能相互继承.
2.继承具有传递性
3.子类能够继承父类的全部特征和行为;
第三个: 单例
一个类只有一个实例,自行实例化并向整个系统提供这个实例,一个单例类可以实现在不同的窗口之间传递数据。
特点
1. 内存为1且只初始化一次 , 在静态区开辟内存;
2. 永远不释放
3. 任何地方都可以使用
4. 多个界面的公共传值
第四个:TableView代理的执行顺序
1.UItableViewDataSource numberOfSectionsInTableView 确定有几个分区
2.UItableViewDataSource numberOfRowsInSection 每个分区有几行
3.UItableViewDataSource cellForRowAtIndexPath 确定每行的cell
4.UITableViewDelegate didSelectRowAtIndexPath 转中改行,进入下一界面
第五个:视图控制器的执行顺序
1.alloc 创建对象,分配内存;
2.init 初始化;
3.loadView 创建视图(如果没有使用xib,storyboard可以重写);
4.viewDidLoad 与loadView配套使用
5.viewWillAppear 视图创建完成,将要显示//将要显示加判断
6.viewDidAppear 视图已经显示
7.viewWillDisappear 用于切换界面
8.viewDidDisappear 用于切换界面
9.dealloc 视图被销毁,释放创建的对象