面试题1


1.简述UIView与CALayer的区别
    两者最大的区别是:
    (1)图层不会直接渲染到屏幕上,UIView是IOS系统中   界面元素的基础,所有的界面元素都是继承自它。
    (2)UIView的绘图部分是由一个CALayer类来管理的。UIView本身更像是一个CALayer的管理器。一个UIView上可以有多个CALayer,每个layer显示一种东西,增强UIView的展现能力。


2.什么是“引用”?声明和使用“引用”要注意哪些问题?

     引用就是某个目标变量的“别名”,对引用的操作与对变量直接操作效果完全相同。声明一个引    用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量有两个名称,即该目标原    名称和引用名,不能再把该引用明作为其他变量名的别名。声明一个引用,不是新定义了一个变    量,它只表示该引用名是目标变量名的一个别名,他本身不是一种数据模型,因此引用本身不占    存储单元,系统也不给引用分配存储单元。不能建立数组的一引用。


3.类方法与对象方法的区别,alloc 和init的区别

    类方法是在程序中直接使用类名来调用的方法,对象方法是需要使用类的实例化变量来调用的方    法,成员变量不可以在类方法中使用,成员变量是依附于对象存在的,如果必须使用成员变量的时候就要使用对象方法。

    alloc是给对象分配内存空间的时候使用。
    init的作用是给变量等进行初始化。


4.MVC简介

    MVC:模型视图控制器
    M:model 模型 保存应用程序的数据
    V : view 视图 显示视图
    C:controller 控制器 在MVC(model-view-controller)设置模式中,充当模型与视图之间的        桥梁,负责将模型中的数据传到视图上进行显示。

    MVC是一个框架模型,他强制性的使程序的输入,处理和输出分开。使用MVC应用程序被分成    三个核心部件:模型,视图,控制器。

5.线程与进程

    进程:是指在系统中正在运行的一个程序
        每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内

    线程:1个进程要想执行任务,必须得有线程(每一个进程至少要有一条线程(主线程))。线程是进程的基本执行单元,程序的所有任务都在线程中执行。

    线程类型:主线程 多线程
    主线程:每个程序必须有主线程
    主线程作用:显示、刷新UI界面 处理UI事件(比如点击事件,滚动事件,拖拽事件等)

    多线程:一个程序开启多条线程,每条线程可以同时执行不同任务(如:下载图片数据)
    多线程优点:能适当提高程序的执行效率,能适当提高资源利用率
    多线程的缺点:1.开启线程需要占用一定的内存空间,如果开启大量的线程,会占用大量的内存空间,降低程序的性能。
2.程序设计更加复杂


6.缓存介绍

    使用缓存的目的是为了使用的应用程序能更快速,使程序高效的运行,有时候我们需要将远程    web服务器的数据缓存起来,存放在沙盒的Documents文件夹中,减少对同一个网络数据的多次请求。
    作用:提高效率 节省流量 提高用户体验


7.Autorelease pool

    自动释放池,是OC的一种内存自动回收机制,可以将一些临时变量通过自动释放池来回收统一释放

    自动释放池本身销毁的时候,池子里面所有的对象都会做一次release操作
(1)在自动释放池中alloc一个对象后(如p1),仍然需要用[p1 autorelease];只是这个语句和[p1 release]不同,后者表示把p1的retainCount -1 ,而前者仅仅表示把p1放到自动释放池中返回一个self,自动释放池结束销毁时,统一对里面的对象引用计数 减一

(2)自动释放池可以随意创建,也可以嵌套使用

(3)不管这个对象是在自动释放池内还是外创建的,只要在自动释放池内写一个[p1 autorelease];p1就会被放到自动释放池中。注意autorelease是一个方法。且只有在自动释放池中使用才有效。

(4)如果把一个对象重复加到自动释放池中如[p1 autorelease];[p1 autorelease] 那么会出错。原因是:加载几次,届时自动释放池就会用[p1 release];释放几次。 但是由于这两个加载的对象其实是一个对象同样地址,所以第一次自动释放正确,第二次自动释放时发现已经被释放了,所以p1就成了野指针。


8.简述内存分区情况

    (1)代码区:存放函数二进制代码
    (2)数据区:系统运行时申请内存并初始化,系统退出时由系统释放。存放全局变量、静态变量、常量
    (3)堆区:通过alloc等函数或者new等操作符动态申请得到,需程序员手动申请和释放。
    (4)栈区:函数模块内申请,函数结束时由系统自动释放,存放局部变量,函数参数。

    另一种说法:代码区,静态区,常量区,堆区、栈区


9.视图的声明周期

    当一个视图控制器被创建,并在屏幕上显示的时候,代码的执行顺序
    (1)alloc    创建对象,分配空间
    (2)init         初始化对象,初始化数据
    (3)loadView         从nib载入视图,通常这一步不需要去干涉。除非你没有使用xib文件创建视                图
    (4)viewDidLoad     载入完成,可以进行自定义数据以及动态创建其他控件
    (5)viewWillAppear    试图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
    (6)viewDidAppear    视图已在屏幕上渲染完成
   

    当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反

    (1)viewWillDisappear    试图将被从屏幕上移除之前执行
    (2)viewDidDisappear    视图已经被从屏幕上移除,用户看不到这个是图了
    (3)dealloc            试图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放

10、类别的作用和局限性
    作用:(1)扩充现有类的功能

(2)扩充自定义类的功能,将自定义类的方法进行分类,使结构更加清晰,调用更加方便。

(3)声明非正式的协议

(4)匿名分类(@interface类名()@end),一般在依赖类的.m文件的最上面生成匿名分类,专门用来声明私有的属性和方法。

   局限性:普通类别只是对类的方法的拓展,不能增加类的实例变量,类别拓展的方法名如果和类的方法相同,那么在调用该方法的时候,就会被类别方法覆盖,造成不能调用原类方法的目的,或者造成程序崩溃。

11、堆和栈的区别

对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来讲,释放工作有程序员控制,容易产生memory Leak(内存泄露)。

堆都是动态分配的,没有静态分配的堆。栈有两种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配是由alloc函数进行分配的,但是栈的动态分配和堆是不同的,他的动态分配由编译器进行释放,无需我们手工实现。

栈(操作系统)存放方法的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;堆存放创建的对象等动态数据。

12、什么是延迟加载(懒加载)?

懒加载即重写get 方法,此方法多用于已有的数据加载方法,加载数据后赋值给数组。

13、static静态变量的作用

(1)表示全局静态,用来修饰成员变量和成员方法。

(2)被修饰的变量和方法独立于该类的任何对象,即它不依赖类特定实例,被类的所有实例共享。

(3)静态方式可以直接通过类名调用,任何实力也可调用

(4)静态变量可以不进行外置声明,直接调用,使用静态方法,不用实例化,创建类的对象,使方法调用方便,节省空间。

(5)static成员是不能被其所在class创建的实例访问,其默认值是0,只要执行一次,运行时开辟全局内存空间,存储上一次数据,便于下一次调用,对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。

14、get和post使用时的区别

(1)get是从服务器上去获取数据,post事项服务器传输数据(一般是用于图片的传输)

(2)get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post 机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看到不到这个过程。

(3)对于get方式,服务器端用Request。QueryString获取变量的值,对于post方式,服务器端用Request。Form获取提交的数据。

(4)get传送的数据量小。post传送的数据量较大,一般被默认为不受限制。

(5)get安全性非常低,post安全性较高。但是get的执行效率却比post方法好。

建议:

(1)get方式的安全性较post方式要差些,包含机密信息的话,建议使用post数据提交方式。

(2)在做数据查询时,建议使用get方式,而在做数据添加,修改或删除时,建议用post方式。

15.数据请求的方法:

NSURLConnection           系统的,常用的方式

NSURLSession                 系统的,IOS7.0之后出现,使用了block,提高了效率

ASIHttpRequest              第三方的,原来经常使用的数据请求库。缺点:环境是MRC,要进行ARC与MRC之间的转化,没有使用block

AFNetworking              第三方的,现在被经常使用,内部集成了NSURLConnection和NSURLSession,环境是ARC,使用了block,提高了开发效率,不用系统库的支撑。

16.@class和#import的区别

#import指令是Object-C针对#include的改进版本,#import确保引用的文件只会被引用一次,这样你就不会陷入递归包含的问题中。

(1)#import包含被引用类所有的信息,被引用类的变量和方法;@class是前向声明,只是告诉编译器在某一个类的.h文件中声明另外一个类,没有声明具体信息。

(2)使用@class只需要被引用类的名称,在.m文件使用#import来包含被引用类的头文件,因为实现类时需要用到被引用类的实例变量和方法。

17、frame和bounds的区别、contentSize、contentInset和contentOffset的区别

这几个都是在ios程序中,经常会注意到的一些小细节,能否真正了解这些,对写ios程序也有很大的好处。

首先,frame和bounds的区别

frame是UIView中表示此view的一个矩形面积,包括了view在它的superview中的一些几何上的标识。有起始坐标,也就是origin(CGPoint)和这个矩形面积的宽(width)和高(height)

bounds每个view,除了有对应它的superview的相关坐标外,它自己的几何坐标,所以bounds就是标识它自己做表关系的一个标识,它有和frame一样的属性,但在数值上会有有些不同。

center是一个view的中心,默认是这个view对应superview坐标的中间值。假如有个view-A,它是view-B的一个subview,view-A在view-B上的起始坐标是(40,40)(此坐标是view-B上的坐标),view-A的高(height)为380,宽(width)为240.所以,view-A的frame值是(160,230).所以,frame和bounds是有关联的,修改其中一个的宽或高,另一个也会相应的改变。

contentSize,contentInset和cotentOffset区别

contentSize 是scrollview中的一个属性,它代表scrollview中的可显示区域,假如有一个scrollview,它的frame为(0,0,320,480),而它的contentSize为(320,960)。也就是说,这个scrollview整个内容的大小为(320,960),要通过上下滑动scrollview来查看(320,480)后的内容.

contentOffset 是scrollview当前显示区域顶点相对于frame顶点的偏移量,比如上个例子你拉到最下面,contentOffset就是(0,-480),也就是y偏移了480

contentInset是scrollview中contentView.frame.origin与scrollview.frame.origin的关系,比如contentView的frame为(0,30,320,480),那么contentInset则为(0,30)

18、copy,retain,assign,readonly,readwrite,strong,weak,nonatomic整理

copy:建立一个索引计数为1的对象,然后释放旧对象,修饰NSString.在赋值时使用传入值的一份拷贝。拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效。

retain:释放旧对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1,对其他NSObject和其子类。对参数进行release旧值,再retain新值。

copy其实是建立了一个相同的对象,而retain不是。retain是指针拷贝,copy是内容拷贝。

retain的set方法应该是浅复制,copy的set方法应该是深复制。

readonly 此标记说明属性是只读。

readwrite此标记说明属性会被当成读写。

nonatomic:非原子性访问,对属性赋值的时候,不加锁,多线程并发访问会提高性能。如果不加此属性,则默认是两个访问方法都为原子性事务访问。

19、程序的生命周期

application didFinishLaunchingWithOptions:开始

applicationWillResignActive:变成不活跃

applicationDidEnterBackground:进入后台

applicationWillEnterForeground:进入前台

applicationDIdBecomeActive:变成活跃

applicationWillTerminate:即将关闭

20、bundle(沙盒):一个应用只能在自己的沙盒中读取或存储文件,而不能操作其他沙盒中的文件。好处:保护应用的隐私不受侵犯。保护系统文件的安排,应用删除后相关文件也能被全部清除。

每个应用都有自己的沙盒,沙盒的根目录的获取方法是NSHomeDirectory()。

根目录下的内容:

- .app文件,实际上是一个文件夹,包含了可执行文件,Nib文件,图片资源、plist等,Xcode中能看到的资源,及编译后的可执行文件,都封装在app中

-Documents文件夹,用于存放你的应用所产生的数据,该文件夹可以通过iTunes备份,可以存储游戏进度等

-Library文件夹,用于存放用户偏好和临时文件

-tmp文件夹是系统的中转站

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,598评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,083评论 0 62
  • 这个是我刚刚整理出的Unity面试题,为了帮助大家面试,同时帮助大家更好地复习Unity知识点,如果大家发现有什么...
    dingz阅读 594评论 0 0
  • 对于互联网从业人员,总是会提到一个词——行业。我们总会讲起或听到关于行业的讨论——VR/AR行业是未来的风口,互联...
    易安公子阅读 15,697评论 14 71
  • 今日头条:罗尔的文章《罗一笑,你给我站住》所揽获的捐款两百余万元已由微信通道全部返还给各捐赠者,为此罗尔公开道歉。...
    格小主阅读 179评论 0 0