iOS 面霸面试题总结~[有答案]

来源:互联网 发布:linux oracle切换实例 编辑:程序博客网 时间:2024/06/08 17:16

//联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄


Day 01


01-分类与继承的区别

分类:增加方法,不能增加变量.但是可以访问类的变量

继承:子类继承了父类所有的方法和变量

继承能增加变量和方法,分类只能增加方法,不能增加变量.

继承会产生一个新的类.

分类不会产生新的类.同名的方法,分类里面优先调用


02-分类与类扩展的区别

类扩展:可以添加属性声明,添加的方法声明,匿名的分类

分类不能添加属性,只能添加方法



Day 02

//retain  mrc  strong  arc

01- 展开:@property (nonatomic,retain) NSArray *cars;


getter方法:

-(NSArray *)cars{

    return _cars;

}

setter方法:

-(void)setCars:(NSArray *)cars{

    if(_cars = !cars){

        [_cars release];

       

        _cars = [cars retain];

    }

}


-(void)dealloc{

    [super dealloc];

//    [_cars release];

    _cars = nil;

}



02- NULL,nil,Nil, NSNull


nil 是对objective c对象赋空值为了避免野指针对指针赋值一个nil

Nil:表示对类进行赋空值

NULL:用于对非对象指针赋空值,比如C指针


NSNull 集合里的空对象

对于像NSArray这样的类型,nilNULL不能做为加到其中的Object,如果定义了一个NSArray,为其分配了内存,又想设置其中的内容为空,则可以用[NSNULL null】返回的对象来初始化NSArray中的内容  初始化内容为空


Day 03

写一个代理


Day 04

写一个代理


Day 05

weak strong的区别,都是啥时候用?


Day 07 解释@selectorSEL的含义和作用

@selector对方法进行包装

SEL是一个数据类型.每一个方法都有一个 isa指针

[self run]


Day 08 程序启动的过程

0.main函数入口


1.创建UIApplication对象,创建代理对象,设置两者的代理关系


2.开启消息循环


3.加载plist文件,看里面有没有指定storyboard,如果指定了,创建UIWindow对象.加载storyboard文件.根据storyboard里面箭头指向的控制器,创建控制器对象,并且设置成window的根控制器,创建控制器的view,显示到window上并且展示出来


没有storyboard,就需要在程序启动完成以后的代理函数里面写代码创建widow对象,创建控制器设置成window的根控制器,展示window

                                                                                

Day 09数据怎么存储,有几种方式

                                                                                

偏好设置

xml xml文件或者plist文件

NSCoding

sqlite 

Core data

                                                                                

Day 10对内存管理的理解

MRC

引用计数器

alloc new (mutable)copy retain  +1

relese  autorelease -1


苹果官方的内存管理原则:

1.谁创建或者 retain,谁释放

2.alloc new (mutable)copy retain ,就会要对应一个

relese  autorelease 


dealloc 对象被销毁的之前,调用



ARC

强指针  对象有强指针指向,就不会被释放

弱指针


循环引用问题