上星期IOS的一个面试题。
美丽说面试题
1,IOS是怎样进行内存管理的,什么是ARC。
2,声明Property时,assign,nonatomic,readonly,retain,copy(各什么意思,括号里没打印出来,我猜得)
3,delegate需要retain吗?
4,什么是designated initlalizer?执行[super init]后会发生什么事?
5,isKindOfClass和isMemberOfClass有什么区别?
6,简述UIViewController的生命周期,比较重要的几个方法分别在什么时间被调用
7,UIView的setNeedsLayout,layoutSubviews分别做了什么事,应该在什么时候被调用。
8,UIView frame,bounds的区别。
9,NSArray,NSDictionary,NSSet的区别。
10,IOS里的异步任务有哪些?
11,IOS里的MVC,常用的设计模式。
12,实现一个瀑布页面,可显示大量内容,需要考虑性能。
13,两个NSArray求交集(需写出代码,有几种方式?他们的优缺点?)
扩展问题。
平时上什么网站,用什么App
最新版的IOS有什么新功能
使用过哪些开源的东西
参与过开源项目么
ios之外还用过哪些语言/平台,它们的优缺点
个人答案,写的不是很仔细。
1,MRR 手动管理 ARC 自动引用计数 mac上可以垃圾回收。
就是你不用再retain/relese/autorelease了,其实你什么都不用做,系统自动进行了计数,如果指向一块内存的指针为0,系统会删除内存。
2,copy:建立一个索引计数为1的对象,然后释放旧对象,对NSString
retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 ,对其他NSObject和其子类
retain是指针拷贝,copy是内容拷贝
readonly此标记说明属性是只读的
assign: 简单赋值,不更改索引计数;
nonatomic:非原子性访问,对属性赋值的时候不加锁,多线程并发访问会提高性能。如果不加此属性,则默认是两个访问方法都为原子型事务访问。先释放原先变量,再将新变量 retain然后赋值;
3,首先delegate(委托)要使用assign而不是retain
一个对象没必要管理自己delegate的生命周期,或者说没必要拥有该对象,所以我们只要知道它的指针就可以了,用指针找到对象去调用方法,也就是委托实现的感觉。
或者我们换个角度,从内存管理方面也可以解释这个问题。delegate的生命周期不需要让该对象去控制,如果该对象对其使用retain很可能导致delegate所指向的对象无法正确的释放。
4,初始化一个子类对象,[super init] 初始化父类。
5,我们可以使用isKindOfClass来确定一个对象是否是一个类的实例,或者是该类祖先类的实例。
isMemberOfClass只能用来判断前者,不能用来判断后者。
可以说:isMemberOfClass不能检测任何的类都是基于NSObject类这一事实,而isKindOfClass可以。
6,当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序
1、 alloc 创建对象,分配空间
2、init (initWithNibName) 初始化对象,初始化数据
3、loadView 从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图
4、viewDidLoad 载入完成,可以进行自定义数据以及动态创建其他控件
5、viewWillAppear 视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
6、viewDidAppear 视图已在屏幕上渲染完成
当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反
1、viewWillDisappear 视图将被从屏幕上移除之前执行
2、viewDidDisappear 视图已经被从屏幕上移除,用户看不到这个视图了
3、dealloc 视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放
关于viewDidUnload :在发生内存警告的时候如果本视图不是当前屏幕上正在显示的视图的话, viewDidUnload将会被执行,本视图的所有子视图将被销毁,以释放内存,此时开发者需要手动对viewLoad、viewDidLoad中创建的对象释放内存。 因为当这个视图再次显示在屏幕上的时候,viewLoad、viewDidLoad 再次被调用,以便再次构造视图。
这里是复制粘贴网上的,还是简写的。
7,setNeedsLayout会默认调用layoutSubViews,可以处理子视图中的一些数据。
layoutSubviews在以下情况下会被调用:
(1、)init初始化不会触发layoutSubviews。
(2、)addSubview会触发layoutSubviews。
(3、)设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化。
(4、)滚动一个UIScrollView会触发layoutSubviews。
(5、)旋转Screen会触发父UIView上的layoutSubviews事件。
(6、)改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。
(7、)直接调用setLayoutSubviews
8,
frame和bounds是UIView中的两个属性(property)。
frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)
bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)
9,
NSArray 用于对象有序集合(相当于是数组)
NSSet 用于对象无序集合 (在内存存储位置不连续,无法用1,2数组下表访问,根据has码存储,遍历时查找效率较高)
NSDictionary用于键值映射
以上三种集合类是不可变的,一旦初始化后,就不能改变
10,
dispatch_async 为了异步执行向分派队列提交一个 Block Object、
dispatch_async_f 为了异步执行向分派队列提交一个 C 函数和一个上下文引用
Operation 异步运行任务,
11,MVC把软件系统分为三个部分:Model,View,Controller。在cocoa中,你的程序中的每一个object(对象)都将明显地仅属于这三部分中的一个,而完全不属于另外两个。
工厂模式,观察者模式。
13,
方法一:使用UITableView。方法二:使用UIScrollView
14.
NSArray求交集,这就简单了,先不粘了。
上星期IOS的一个面试题。的更多相关文章
- 外企iOS开发的笔试题
一组外企iOS开发的笔试题,您能回答出来吗?从群里收集来的. (miki西游@mikixiyou的文档,原文链接: http://mikixiyou.iteye.com/blog/1546376 转 ...
- QQ群里收集的外企iOS开发的笔试题
一组外企iOS开发的笔试题,您能回答出来吗?从群里收集来的. 1 why can't NSArray contain NSInteger Instance? with which extra step ...
- iOS开发工程师笔试题
iOS开发工程师笔试题 1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? Object-c的类不可以多重继承:可以 ...
- iOS 模仿一个小项目,总结一下里边的模块
ManoBoo: 参考链接:http://www.jianshu.com/p/fd4c46c31508 这个小的项目是参考ManoBoo的简书的,链接在上方,自己在仿做的过程中,也离不开Man ...
- 关于foo的一个面试题
今天看到一个关于foo的一个面试题,赶脚特别有意思 function foo(){// 第16行 getName = function(){console.log(1)} return this } ...
- iOS查看一个软件ipa包的全部内容
iOS查看一个软件ipa包的全部内容 一,打开itunes----->我的iPhone应用程序. 二,右键点击app---->在Finder中显示---->出现下图所示界面. 三,将 ...
- iOS开发一个制作Live Photo的工具
代码地址如下:http://www.demodashi.com/demo/13339.html 1.livePhoto简介 livePhoto是iOS 9.0 之后系统相机提供的拍摄动态照片的功能,但 ...
- 我的Android进阶之旅------>关于android:layout_weight属性的一个面试题
最近碰到一个面试题,按照下图,由Button和EditText组成的界面下厨布局代码,解决这题目需要使用android:layout_weight的知识. 首先分析上图所示的界面可以看成一下3个部分. ...
- iOS之2016面试题二
前言 招聘高峰期来了,大家都非常积极地准备着跳槽,那么去一家公司面试就会有一堆新鲜的问题,可能不会,也可能会,但是了解不够深.本篇文章为群里的小伙伴们去要出发公司的笔试题,由笔者整理并提供笔者个人参考 ...
随机推荐
- 十大算法 pagerank 傅里叶变换
来源于最近阅读的一些链接 首先是介绍十大算法的 http://blog.jobbole.com/70639/ 然后是pageRank算法 http://blog.jobbole.com/23286/ ...
- Nicholas C. Zakas如何面试前端工程师
转载自:http://www.cnblogs.com/yizuierguo/archive/2010/02/04/1663767.html Original Post:Interviewing the ...
- sqlplus查看服务名
查看服务名: show parameter service 查看实例名: select * from v$instance; 查看数据库名: select name from v$database; ...
- Swift 函数和类
函数: func sayHello(personName:String,z:Int)->{ return "hello"+personName+z } print(sayHe ...
- Linux网络管理——TCP/IP四层模型
1. 网络基础 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB",&q ...
- hadoop笔记之Hive的管理(CLI方式)
Hive的管理(一) Hive的管理(一) Hive的启动方式 CLI(命令行)方式 Web界面方式 远程服务启动方式 CLI方式 1. 进入命令行方式 直接输入<HIVE_HOME>/b ...
- jquery学习(2)--选择器
jquery-李炎恢学习视频学习笔记.自己手写. 简单的选择器 css 写 法: #box{ color:#f00;} //id选择器 jquery获取:$('#box').css( ...
- 自学HTML5第四节(canvas画布详解)
canvas画布好像可是说是HTML5的精华了,一定要学好,嗯嗯,绚丽的东西就要从基础的开始.... 先看看啥玩意叫做canvas 什么是 Canvas? HTML5 的 canvas 元素使用 Ja ...
- surface 其实是UEFI与BIOS并存,借用官网的进入方法(少有更改)
surface 其实是UEFI与BIOS并存,借用官网的进入方法(少有更改) 第一种: 1. Swipe in from the right edge of the screen, and ...
- 【Windows 8 Store App】学习一:获取设备信息
原文http://www.cnblogs.com/java-koma/archive/2013/05/22/3093306.html 通常情况下我们需要知道用户设备的一些信息:deviceId, os ...