美文网首页
简单面试题

简单面试题

作者: 叶君臣 | 来源:发表于2016-11-03 21:48 被阅读0次

    1.import和 include的区别

    #include:它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件

    #import:大部分功能和#include是一样的,但是他处理了重复引用的问题,我们在引用文件的时候不用去自己进行重复引用处理

    2.@property作用:

    a.生成一个带_的私有属性

    b.生成这个私有属性的getter,setter方法的声明

    c.生成这个私有属性的getter,setter方法的实现

    3.栈和堆区别

    a.栈:存储的是局部变量。当作用域结束的时候,由系统回收局部变量所占用的内存空间

    b.堆:存储的是程序员手动申请的变量或者OC对象。如果要回收堆空间的变量,应该要使用free函数来进行释放

    4.单例,如何使用单例

    a.为单例对象实现一个静态实例,并初始化,然后设置成nil,

    b.实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例

    c.重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,

    d.适当实现allocWithZone,copyWithZone,release和autorelease

    4.单例,如何使用单例

    a.为单例对象实现一个静态实例,并初始化,然后设置成nil,

    b.实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例

    c.重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,

    d.适当实现allocWithZone,copyWithZone,release和autorelease

    5.继承和类别的区别

    a.联系:可以给一个类拓展的方法,或修改已有的方法

    b.区别:

    1.继承修改的方法不会对父类原方法产生影响;类别修改的方法相当于替换了原有方法

    2.以ViewController举例,继承一个ViewController相当于建立一个新的界面;而给一个ViewController添加类别用于增加或修改原ViewController上的方法

    3.类别支持开发人员针对自己构建的类,把相关的方法分组到多个单独的文件中,对于大型而复杂的类,这有助于提高可维护性,并简化单个源文件的管理

    4.针对系统提供的一些类,例如:NSString,NSArray,NSNumber等类,系统本身不提倡使用继承取拓展方法,因为这些类内部实现对继承有所限制,所以最后使用类别的方法进行拓展。

    5.理论上类别不能增加新属性

    6.初始化构造

    /*1.构造函数

    a.创建对象  [类名 new]  new其实是一个类方法,返回一个对象,他是在NSObject类里面的。

    new方法,内部其实调用了两个方法 : alloc  init

    b.alloc方法 是一个类方法,返回一个当前对象。

    c.init方法  是一个对象方法,返回一个当前对象

    d.以下创建对象的方式是一样的。

    Person * p1 = [Person new];

    Person * p2 = [[Person alloc] init];

    e.alloc方法是申请空间创建对象的,init是初始化对象的属性的值的。

    init给对象的属性赋默认值。

    oc指针 nil

    c指针  NULL

    bool   NO

    基本类型  0

    现在我们不想  给这些属性赋值 赋默认值。

    重写init方法。

    2.重写init方法 , 有规范 (构造函数)

    a.调用父类的init方法,用self接受。

    b.判断这个self是否为真,如果为真,就执行自己初始化的代码。

    c.返回这个self。

    3.自定义构造函数: 对象方法,名字一定要initWith开头

    4.代码

    -(instancetype)initWithName:(NSString *)name andAge:(int)age andGender:(BOOL)gender

    {

    self = [super init];

    if (self)

    {

    self->_name = name;

    self->_age = age;

    self->_gender = gender;

    }

    return self;

    }

    7.线程和进程的区别和联系

    一个进程可以有一个或者多个线程组成

    进程和程序并不是—对应的,一个程序执行在不同的数据集上就成为不同的进程,可以用进程控制块来唯一地标识每个进程。而这一点正是程序无法做到的,由于程序没有和数据产生直接的联系,即使是执行不同的数据的程序,他们的指令的集合依然是一样的,所以无法唯一地标识出这些运行于不同数据集上的程序。一般来说,一个进程肯定有一个与之对应的程序,而且只有一个。而且一个程序有可能没有与之对应的进程(因为它没有执行),也有可能有多个进程只对应(运行在几个不同的数据集上)。

    相关文章

      网友评论

          本文标题:简单面试题

          本文链接:https://www.haomeiwen.com/subject/eajiuttx.html