【ios面试总结】
一 C语言方法的知识
1: const static voilite 修辞变量各代表什么意思?
const 修辞的变量为常量,常量是不容许修改。
static 修辞的变量为静态变量,在内存中只被创建一次(如UItableView 中创建Cell的代理方法 用会用到静态变量标识Cell)
Volatile定义变量为一个共享变量
2: static 的作用
在类中 static 修饰的变量属于整个类的所有,对类的所有对象共享一份
在类中static 修辞的方法属于这个类所有,该方法不能通过this来访问 只能通过类来访问该方法。
在函数体 static修辞的变量 在内存中只被分配一次,多次调用函数体都是调用内存中的同一份。
二 OC中内存方面。
1 :OC 中内存管理方式
当对象调用 alloc /retain /copy 的方法时,对象的引用计数器会加1 ,当对象不在使用的时候要调用release/Autorelease将其释放。
2 :release和Autorelease的区别。
当对象调用release的时候 对象的引用计数器减1.
当对象调用Autorelease 对象引用计数器会被系统放在最新的一个自动释放池中,当程序执行作用域外 自动释放池就会被释放此时对象的引用计数会被减1.
3:readwrite readonly assign retain copy atomic nonatomic的属性作用
readwrite readonly是设置属性访问级别。
assgin 是直接赋值 系统默认的
retain 该类想一直持有属性,对象属性计数器会加1
copy 对象的拷贝 (当属性是NSString 是对象拷贝时浅拷贝 ,当对象时NSMutableString 对象时深拷贝)
atomic nonatomic 线程访问 nonatomic是非原子访问,不加同步。
4: 深拷贝和浅拷贝的区别。
浅拷贝是指针拷贝对象引用计数加1(如NSString对象调用copy是浅拷贝)
深拷贝在原有对象基础上拷贝出一个新的对象(如NSMutableString对象调用copy是深拷贝)
5: OC中如何管理内存
有2种 第一 手动管理方式 第二 ARC 自动管理方式。
三 OC中面向对象
1: 什么是多态
多态 子类的指针可以指向父类,调用相同的方法 实现不同的功能。
2:代理的作用
代理 改变或控制传递链。容许一个类在特定的情况下通知其他类来完成某项功能(如应用程序启动完成 会调用applicationDelegate类的方法来监听应用程序的生命周期)
3:类别的作用(category)
类别主要作用可以动态为类扩展新的功能和方法。(如在项目中很多地方都使用文件缓存即 在NSObject中添加一个保存缓存的方法,方便公用)
4: 类别和扩展的区别。
相同点:
类别和扩展都可以动态为类添加新的方法,
不同点:
类扩展可以添加属性,并且类扩展声明的方法都必须实现。
类别 不能添加属性,类别中声明的可以不实现。
5: Object-c 支持多继承吗? 有私有方法和私有变量吗?
Object -c 不支持多继承,可以采用多个协议来实现多继承。
没有私有方法只有类方法和实例方法。
6: 扩展一个类是用继承好还是类别好?
一般使用类别好,不用定义子类 还能直接把类的定义放在不同的文件里面(如要扩展NSString 的方法最好使用类别)
7: 什么时候用delegate? 什么时候用Notification?
delegate 针对对象一对1
Notification对一对多。
8:@Prviate @protected @public 声明中代表什么含义?
@prviate 私有的 只有本类中可以访问
@protected 受保护,只有本类和子类中可以访问
@public 公用 任何类都可以访问。
四 OC中的特性:
1: id声明的对象有什么特性?
id 声明的对象具有运行时的特性。声明对象可以指向OC中任何类型的对象。
2:对于NSString * str =[[NSDate alloc ] init ] 对象str编译时和运行时的类型区别?
str 编译时 是NSString 运行时 是NSDate
3: KVC和KVO的区别
KVC 键值编码是一种间接访问对象属性的的机制,通过字符串来间接访问属性。
KVO 键值观察模型 当对象属性发生变化 会自动响应对象的指定方法
4: #import和#include的区别,@class代表什么?
@class 用来声明一个类 用来解决同文件相互包含
#import 是OC引入头文件的关键字,
#include 是C语言引入头文件的关键字。
#include引入头文件可能引起重复编译 而#import则不会引起重复编译。
5:线程和进程的区别?
相同点:线程和进程都是操作系统运行中基本单元,系统利用该基本单元实现系统对应用的并发。
不同点:
进程有独立的地址空间 一个进程崩溃 在保护模式下不会影响其他进程。
线程是进程中执行片段路径,线程没有独立的地址空间 但是有自己的堆栈和局部变量,一个线程崩溃等于整个进程死掉。即 多进程比多线程健壮性更好,但是系统在切换进程中会浪费多资源。
6:堆和栈的区别?
管理方式:
栈上的变量 是由编译器自动管理 不需要手动管理。
堆上的变量 是由程序员手动开辟和释放。
7: id nil Nil的区别?
id 是声明对象具有运行时的特性。可以指向OC对象中的任何类型。
nil 指的对象的指针为空。
Nil 指向空的类。
8:@import<>,@import “” 和@class的区别
@class 用来声明一个类 用来解决同文件相互包含
@import<> 用来导入系统头文件
@import “” 用来导入自定义头文件
9: 方法和选择器有何不同?
selector(方法) 表示方法名称
method 是一个组合体 表示方法名称和实现。
10 :你对@property 和@interface 的理解
@interface 用来声明一个类。
@property 用来声明2个方法 编译器会自动生成 get set方法。
11: OC 语言的优缺点
优点:
1:category
2: C C++ OC 混编。
3: 动态识别
缺点:
1:不支持运算符重载
2:不支持多继承。
五: IOS 生命周期
1:ViewController 的 loadView, viewDidLoad, viewDidUnload 分别是在什么时候调用的?
loadView 是当调用 self.view=nil 会调用loadView方法
viewDidLoad 是当View加载完成后调用该方法。
viewDidUnload是view的视图控制器在window上销毁后调用。
2: 应用程序被打开有几种方法
1: 正常打开
2:本地通知打开程序
3:被另一程序调用打开(程序可以开启微信)
六 IOS中UI部分
1:Frame 和Bounds的区别?
Frame 是子View的坐标相对于View的位置。
Bounds 是自己的坐标系(其中X =0 Y=0)
2: UIView和CALayer的区别?
UIView是ios基本界面基础 所有界面元素都基础UIView上,在UIView内部上绘图部分是由图层来完成。
3: 事件处理过程
当用户触摸在一个View的点时 看点是否存在subview 和subview的subview上。
如果同时都存在 事件处理有当前View处理。
如果不是同时存在subview的subview上 触摸点由由最近的一个Subview来处理。
4; 事件处理终止条件
alphe <0.01
userInteractionEnabled=NO
Hidden ==yes
5: UIView的生命周期是什么样的?顺序是怎么样的。
创建View和呈现View
init -- loadView --ViewdIdLoad --ViewwillAppear-- viewDidAppear
View的消失和销毁
viewWillDisappear--viewDidDisappear--ViewUnload--dealloc
6:UIViewController在什么时候回加载View.
当调用self.view =nil的时候 会调用loadView去重新加载View.
7: UITableView中代理方法执行的流程是什么样的?
第一步: 得到section -- numberofSectionTableView
第二步: 得到Row -- numberofRowTableView
第三步: 创建Cell -——方法忘记了。
8: UITaleView中怎样实现重复使用Cell.
1: UITableView对象 先冲缓存中取出Cell
2: 取出Cell 如果为nil 就重现创建
3: 取出的Cell如果不为nil 就是重新赋值。
9:如何设计一个可变高度的Cell?
1:得到内容 通过内容算出内容所占的高度
2:在UITableView中设置Cell代理方法中 把算出来的高度赋值即可。
10: 谈谈UITableView中使用MVC模式。
MVC模式
M 代表数据模型 主要提供数据源。
V 代表视图模型 主要用来展示界面。
C 代表控制器 主要是数据模型和视图模型的桥梁。
七 :IOS的数据存储
1:ios存储数据源有哪些方式。
文件存储(文件缓存),
plist ,
NSUserDefault(用来存储密码)
sqlit(商品信息)
3: 数据库优化经验
1:批量操作要在一个数据库连接中完成
2: 多个操作要开启事物
3:查询要开启分页查询。
八:IOS中网络和线程
1:网络请求的安全性处理。
答:一般请求中都用的是Post的请求,Post请求的参数都经过 Base64编码。
2:ios中常用线程
队列(operationQueue) 创建一个任务 把任务加入到任务队里就开启了一个异步线程。
GCD 操作
3:什么是TCP三次握手
第一次握手: 客户端向服务器发送请求 等待服务确认
第二次握手: 服务处理客户端的请求。
第三次握手: 服务器把处理好的请求响应给客户端。
4:Socket建立网络连接步骤
1:客户端请求: 客户端通过套接字向指定IP 端口 协议发出请求。
2:服务端监听:服务端套接字实时监控网络请求 等待客户端的请求。
3:连接确认:当服务端监听到客户端发送过来套接字 并且处理响应给客户端。
九 :IOS其他操作
1:ios消息推送机制
答: ①:应用程序 把 要发送的消息 和 iphone的标识打包 发送给 苹果推送服务器
②:苹果服务器 逐一查找打包好的iphone标识 并且发送消息
③:iphone把发送消息传递给相应的程序 弹出push的通知
十: ios 开发中遇到的问题
1:连续多次点击导航按钮,会重复创建多个控制器?
解决方案: 在点击按钮中加一个bool值判断,如果一次点击 直接创建VC,第二点击就不执行创建VC
【ios面试总结】的更多相关文章
- ios面试技术要点
iOS面试 技术总结点(可参考):多线程 运行时 runloop app框架 几种动画编程 jsonmodel原理 sdwebimage原理 masonry怎么应用及原理 应用框架有哪些 说一下Fac ...
- iOS 面试基础题目
转载: iOS 面试基础题目 题目来自博客:面试百度的记录,有些问题我能回答一下,不能回答的或有更好的回答我放个相关链接供参考. 1面 Objective C runtime library:Obje ...
- iOS面试贴士
iOS面试小贴士 ———————————————回答好下面的足够了------------------------------------- 多线程.特别是NSOperation 和 GCD 的内部原 ...
- IOS面试攻略
IOS面试攻略(1.0) 2013-10-13 20:58:09| 分类: IOS面试 | 标签:ios知识点总汇 ios面试 |举报|字号 订阅 来自:伊甸网 @ 看到这个关键字,我 ...
- C C++ OC iOS面试重点问题(一)
C C++ OC iOS面试重点问题(一) 1.字符串常量需要加\0 2.逻辑运算 位操作(经典:实现两个数的交换) 3.关键字 4.引用和指针的区别和联系 5.如何引用一个已经定义过的全局变量? ...
- IOS面试问题总结
IOS面试问题总结 分类: IOS开发2013-11-20 17:26 10458人阅读 评论(1) 收藏 举报 目录(?)[+] 通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题 ...
- 十个iOS面试问题
十个iOS面试问题 十个iOS面试问题.不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技能和积累的考察,也是一个开发者自我检验的好机会. ...
- [转] 上级向的十个iOS面试问题
上级向的十个iOS面试问题 转自 http://onevcat.com/2013/04/ios-interview/ 不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术 ...
- iOS面试的算法相关
转自:https://www.jianshu.com/p/c4820b159159 面试中遇到的这些算法,在平常工作中,基本不会用到. 不过现实的面试中经常喜欢问关于算法的问题 有些还要求写出代码.一 ...
- 一些iOS面试基础题总结
一些iOS面试基础题总结 目录 多线程 AutoLayout objc_msgSend Runtime 消息转发 Category NSObject 与 objc_class Runloop Auto ...
随机推荐
- 一个div,包含两个div,调整文字位置和div平均分布
网页中经常会用到,一个div下平均分布两个小的div,两个小的div,显示的内容为图片还比较好处理,显示文字则不好控制效果,今天写了一个如图效果的 html: <div class=" ...
- Hibernate 注解的用法以及说明
1.类级别注解 @Entity 映射实体类 @Table 映射数句库表 @Entity(name="tableName") - 必须,注解将一个类声明为一个实体be ...
- MAC 安装j2ee.sh的办法
It says it needs the DISPLAY variable set - what do I need to set it to? Instead of saying: ./java_e ...
- flask-admin章节一:使用chartkick画报表
一般中小型WEB整体来看逻辑比较简单些,一般都是基于数据库的增删改查.不过通过数据库查询到的记录直接展示给用户不是很直观,大家其实蛮期待有一个报表 直接展示他们期待的内容. 这块就涉及到数据的提取和展 ...
- 把文件打成zip或然rar下载 (详询请加qq:2085920154)
//文件打包下载 public static HttpServletResponse downLoadFiles(List<File> files, HttpServletRequest ...
- c#在主窗体panel 容器内嵌入另一个窗体(子窗体)的实现
主窗体: 子窗体: 把子窗体嵌入到主窗体的panel 右侧中: 代码: { public MainForm() { InitializeComponent(); } private void Clo ...
- MyISAM和InnoDB索引区别
MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址.下图是MyISAM索引的原理图: 图8 这里设表一共有三列,假设我们以Col1为主键,则图8是一个MyISAM表 ...
- 搭建selenium自动化环境步骤
1.下载pythonhttps://www.python.org/downloads/2.安装2.X或者3.X3.添加环境变量python和pip(与python一起安装)4.下载setuptools ...
- JSTL和EL
JSTL和EL 1.EL表达式总是放在大括号里,而且前面有一个美元符前缀. person.name2.相似点:(1).都可以让我们在静态内蓉中插入动态信息.EL:室外温度是{emp}度 JSP:室外温 ...
- setAutoCommmit保持数据的完整性
setAutoCommit总的来说就是保持数据的完整性,一个系统的更新操作可能要涉及多张表,需多个SQL语句进行操作 循环里连续的进行插入操作,如果你在开始时设置了:conn.setAutoCommi ...