上星期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的一个面试题。

时间: 08-17

上星期IOS的一个面试题。的相关文章

从一个面试题开始学习C++类基础

前几天一个朋友参加了一个C++的面试,在面试后,他给我发了一个面试题,然后本屌用仅有的一点C++基础,开始了我的关于类的基础学习.题目大致是以下这样的:有一个类A,在main函数调用完之后,会打印哪些信息. 代码如下: class A { public: static int m_iCount; A(){++m_iCount;} ~A(){--m_iCount; print();} void print() { cout << "m_iCount = " <<

ASPNET服务端控件练习(一个机试题)

简单记录: 模糊查询的select语句的拼写 public List<Model.Student> GetWhereStudent(string name, string sub, string isG) { List<Web.Model.Student> lt = new List<Model.Student>(); string sql = "select * from SC_Student where studentName like @n and [e

IOS写一个可以支持全屏的WebView

这样来写布局 一个TitleView作为顶部搜索栏: @implementation TitleView - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code [self initTilte]; } return self; } -(void)initTilte{ UITextField* field = [[UITextField al

IOS的一个带动画的多项选择的控件(二)

然后我们来写:TypeSelectView 这个比较简单,我们只要只要每个TypeView的位置,然后作为自己的subview就好了 @interface TypeSelectView : UIView @property(nonatomic) BOOL bShown; @property(nonatomic, strong) TypeView* curSelectedView; -(id)initWithFrame:(CGRect)frame searchType:(int)type; @en

ios下一个4字节对齐引起崩溃的问题

staticvoid TEACore(unsignedint in[2], unsignedint out[2], unsignedint key[4], long rounds) { unsigned int y = in[0], z = in[1]; unsigned int limit = 0, sum = 0; if(rounds > 0)// encrypt { limit = DELTA * rounds; while(sum != limit) { y += ((z<<4)

IOS的一个带动画的多项选择的控件(一)

先上效果图: 这个程序分2个层次,一个是顶部的带UITextField的bar,一个是下拉选择的view,下拉选择的view带有4个自定义的UIView 我们先定义一个UIViewController叫MyViewController,然后顶部的bar叫TopBarView,下拉选择的view叫TypeSelectView,像UIButton的自定义的view叫做TypeView TypeView有两种状态,如果手指触摸到的item就是选中状态,所以TypeSelectView应该有个属性表示当

iOS开发工程师面试题(二)

1.手写冒泡跟插入排序 冒泡排序来源于生活常识,相当于把数组竖起来,轻的向上,重的向下.void bubbleSort(int[] unsorted) { for (int i = 0; i < unsorted.Length; i++) { for (int j = i; j < unsorted.Length; j++) { if (unsorted[i] > unsorted[j]) { int temp = unsorted[i]; unsorted[i] = unsorted[

iOS开发基础笔试题(3)

前言 以下部分题目来源于网络,笔者在此处收集起来,既是要巩固自我,也希望能够帮助到同样需要的人!参考答案均为笔者所写,其有疑问或者出错之处,请在评论中提出,谢谢!不喜勿喷! 1.即时聊天App不会采用的网络传输方式 1 2 3 4 5 6 A UDP B TCP C HTTP D FTP 参考答案:D FTP:是文件传输协议,是File Transfer Protocol的简称,它的作用是用于控制互联网上文件的双向传输,因此一定不会是即时聊天使用的: UDP:是面向无连接的传输层协议,数据传输是

iOS开发基础笔试题-(1)

前言 以下部分题目来源于网络,笔者在此处收集起来,既是要巩固自我,也希望能够帮助到同样需要的人!参考答案均为笔者所写,其有疑问或者出错之处,请在评论中提出,谢谢!不喜勿喷! 1. #import和#include的区别? 参考答案: #import是Objective-C导入头文件的语法,可保证不会重复导入.#include是C/C++导入头文件的语法,如果是Objective-C与C/C++混编码,对于C/C++类型的文件,还是使用#include来引入,这种写法需要添加防重复导入的语法. 2

iOS 制作一个简单的画板

制作简单画板 作为iOS初学者,在学习完UI的几个简单控件(UILable,UITextField,UIButton)之后,就可以制作一个简单的画图板demo,以下是具体制作流程(在MRC下),如有不足之处,还请各位大神们指教 0.0. 1.搭建界面,主要由UIButton,UITextField组成,底部的按钮是UITextField的一个自定义键盘(inputView) . - (void)viewDidLoad { [super viewDidLoad]; //创建菜单按钮 UIButto