1.#import与include @class的区别
@class 一般用于头文件中要声明某个实例变量时候用,其实也就是某个类的声明,当用到的时候编译器执行时,才会找它的实现文件。
#import是oc中用于导入头文件,include是在c中导入头文件的,#import比起#include就是不会引起交叉编译。
2.对象方法中,self.name = @"liming",和name = "liming"有什么不同。
self.name:会调用setName:方法,后者会直接赋值给当前对象属性
3.static的作用?
1.函数体内的static变量的作用范围为改函数体,不同于auto变量,该变量只被分配一次。
2.在模块内的时候,static的全局变量只能被模块所用函数访问,static函数只能被这一模块内的其他函数调用,
3.在类中,static的全局变量属于整个类所有,static成员函数属于整个类所有。
4.说明内存分区的情况
1.代码区:存放的是二进制代码
2.数据区:系统运行时申请内存并初始化,系统退出时由系统释放,存放有全局变量,静态变量,常量。
3.堆区:通过new等操作动态申请得到,需要程序员手动申请和释放。
4.栈区:函数模块内申请,函数结束由系统释放。存放局部变量,函数参数。
5.MVC模式?
模型、视图、控制器。
模型:定义了程序的数据和操作数据逻辑,
视图:显示应用程序的数据。
控制器:是模型和视图之间的协调者。
6.oc中加号方法和减号方法的区别?
oc中加号是类方法,属于静态方法,减号是实例方法,
7自动释放池?如何工作
自动释放池:当您向一个对象发送autoRelease消息的时候,cocoa会将该对象的一个引用放入到自动释放池中,自动释放池内作用域的其他对象是可以向它发送消息的,当程序执行到作用域的结束位置,自动释放池就会释放,池子中所有对象都会释放。
8.oc为什么是动态语言
动态类型:运行时决定对象的类型。
动态绑定:基于动态类型,某个实例对象被确定后,其类型便被确定,该对象的属性和响应消息完全确定。
动态加载:开发icon图片的时候在Retain设备上要多添加一张@2x的图片,当设备更换时候图片会自动替换。
9.视图控制器的声明周期?
init 初始化
awakeFromNIb loadView之前的工作在这里
viewDidLoad 一个viewcontroller的一个生命周期调用一次
viewWillAppear view将要出现,每次view消失再出现都会调用
viewWillLayoutSubViews 对子视图进行布局
viewDidLayoutSUbVIewS 完成对子视图布局
viewWillDisapper view将要消失
viewDidDisapper view已经消失
10、动画类型:显式和隐式
11.实现表格的话,我们需要设置UITableView的什么属性、实现什么协议?
设置UITableView的datasource、和delegate属性,遵循UITableviewDataSource、UITableviewDelegate协议。
12.操作socket的集中方法?
CFNetwork、CFSocket、BSD Socket
13、代理为什么用weak修饰?
先来说说weak:weak == “非拥有关系” ,说明该对象不负责保持delegate这个对象,delegate这个对象的销毁由外部处理。
strong:该对象强引用delegate,外界不能销毁delegae对象,会导致循环引用,
14、类别的作用,继承和类别的比较?
类别:在不改变原有类代码的情况下添加新的方法,如果类别和原有类名产生冲突会覆盖原来的方法,类别具有更高优先级,
作用:将类的实现可以放在不同的文件中;创建对私有方法的前向引用(调用类的私有方法,分类写在.h中无用,对此一举,写在.m中无效;单独创建独立的分类有效);向对象添加非正式协议(非正式协议是NSObject类的类别)。