16年6月面试题

1.你如何理解iOS内存管理

1. new alloc copy retain这些对象我们都要主动的release或者autorelease

2.如果是类方法创建的对象,那么系统自动释放池自动在适当的 时候会帮我们release

3. ARC xcode自动会帮我们人工智能的添加release autorelease操 作

2.C语言里的数组与OC数组的区别

OC数组是一个对象,有大量的方法,c没有都需要自己写C数组删除是需要后面往前移动,oc数组自动处理

3.浅拷贝与深拷贝的区别 或者什么是深拷贝 什么是浅拷贝copy, mutableCopy

@interface A {

B *b; }

浅拷贝只是拷贝对象本身,不会对里面的子对象进一步拷贝

深拷贝会对子对象以及子对象的子对象进一步拷贝

4.解释TCP/IP协议HTTP

TCP UDP

IP

TCP/IP是网络开发中常见的传输协议,他传输和udp相比是可靠 的。http是基于tcp/ip的主要用户互联网的协议

所谓可靠是tcp传输对方会给一个ACK信号(确认信号)

tcp传输不如udp快,吞吐量不如udp大

tcp是顺序的,udp是无序的

tcp会保持连接,udp不会保持连接

在我们iOS开发中用http较多。http协议是一个被动式的

5.界面之间传值有哪几种方法单例,代理,直接赋值,通知中心/广播,数据库等多种

6.什么是MVC模式

Model, View, Controller,是iOS开发中的典型的设计模式。比如通 过http把网络数据下载并解析然后存于自己的数据模型Model中, 然后通知controller去刷新界面,通过controller讲Model和View进行关联,这种模式就叫mvc。

这样的好处是,可以隔离数据模型model和View界面。遵循了低 耦合的设计思想.

7.常见的点击手势有哪几种

UIPinchGuesture, UITapGuesture, UISwipGuesture,

UILongPressGuesture, UIRotationGuesture

8.瀑布流怎么理解和实现的

1.如果简单的来说,用3个tableview就可以实现瀑布流,3个tableview实现联动滚动。

2.其实最好的做法在scrollview上使用3个复用队列,如果一种 一个cell超过屏幕,不能release,而是把它回收到复用队列中, 如果要创建一个cell,首先从复用队列中取一个,然后使用。

9.你如何理解复用机制

一般是对uiscrollview做复用机制,因为uiscrollview滚动窗口没 有复用,所以要做,原理就是超过屏幕的view不能销毁,而要放 在复用队列/池里面存放起来,然后以后要在scrollview显示view首先不要alloc创建,而要首先去复用池里面找有没有可复用的view,如果没有就alloc如果有就直接用。

10.类别的作用类别是给已有的类添加方法,但是不能添加变量,匿名类别除外()

11.类别和继承什么区别

类别/类目/Category很方便给现有类添加方法。但是不能添加成 员变量,匿名类除外,比如可以给NSString增加方法,给UINavigationBar增加方法,比如SDWebImage给UIImageView增 加了setImageWithURL:方法。类别对于使用者很方便

继承可以给现有的类增加方法和成员变量。继承对于使用者来 说不如类别方便 ,比如对SDWebImage如果用继承的话,那么就 需要写一个类似于QFImageView然后把所有的UIImageView改成

QFImageView,这里不如类别方便

12. C和OC有哪些基本数据类型

C char, short, int, struct, union, enum

NSString, nsarray, nsdictionary.

13.解释多线程、NSThread、NSOperation、GCD

多线程在iOS用的很多,比如每个asi请求,sdwebimage请求,数 据请求等待等网络数据处理,多线程/异步就是主要是为了界面流 畅,防止界面假死。

每一个ASI请求就是一个NSOperation

每一个NSUrlConnnection也是一个线程

Nsthread是创建线程的一个通用的类。比如线程创建,取消,开 始等。

Nsoperation就是一个简单的以任务为导向的多线程模型。目的是 为了不懂操作系统,不懂线程的人使用的

GCD类似于NSOperation,是一个blocks版本的线程模型。

14.什么是异步

相对于同步来说,单独起一个或者多线程去处理 异步是一个概念 线程还是一个技术,异步就是用线程这种技术 实现的

比如界面下载数据,我们启动一个异步任务ASI去网络下载数据, 然后异步刷新界面,我们无需等待网络数据下载完成.

15.代理和协议什么区别

代理是一种概念,协议是一种技术,代理是用协议来实现的,代理 是2个对象之间通讯的一种方式。 代理主要做反向传值的。实现系统的一些回调方法,比如scrollview滑动事件,选择照片,asi网络下载完成等。

iOS开发和objective-c区别

16.代理和通知中心/广播/NoficationCenter什么区别

代理主要是反向传值,一般用来1:1的两个对象通讯上。

通知中心是通过注册然后接收事件的一种n:n(多对对)的方法

17. UITextField、UITextView的区别

UITextField不能换行,UITextView可以换行。TextView可以点击

字体放大,可以复制。相同的是他们都有代理类似

18.怎么解析HTML源码

一般HTML是通过webview来显示的。一般简单的html是通过 解析字符串来解析。没有成熟现成html解析器。 一般服务器去抓取html解析html形成json xml文件供手机端读 取。

19. Objective-C如何和javascript通讯

Objective-c --àjavascript ---àhtml里面内容

Objective-c是通过stringByEvaluatingJavaScriptFromString函数 来执行html中的javascript

Javascript -àurl --àobjective-c本地方法

需要通过uiwebview中的代理函数

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType;

20.如何调用iOS打电话,发短信

[[UIApplication sharedApplication] openURL:[NSURL urlwithString:@”tel://1543434”]]; [[UIApplication sharedApplication] openURL:[NSURL urlwithString:@”sms://1572234”]]; [[UIApplication sharedApplication] openURL:[NSURL urlwithString:@”mail://hello@hello.com”]];

[[UIApplication sharedApplication] openURL:[NSURL urlwithString:@”http://1000phone.net”]];

21.下拉刷新需要实现哪几个方法,刷新流程

下来一般使用EGORefresh进行。原理是利用scrollview的反弹效 果把刷新view加载scrollview的负坐标上。通过代理方法去触发。

22.解释const, static, inline关键字

const修饰指针,或者常量,比如不可变,

static修饰变量表示作用域,比如全局的私有变量,函数内部的static是内部的私有变量。

Static修饰函数表示函数是文件作用域

Inline表示内联。一般来说inline需要和static联合用 一般用法是static inline int max(int a, int b) {

return a>b?a:b; }

static inline作用是和宏类似,只不过是方便调试(宏不能断掉调 试,static inline可以)。运行时候是一样的。

一般c/c++短小的函数都用static inline内联函数

23. OC里怎么实现多继承

OC没有多继承。用协议实现多继承,把协议中的方法在实现的类 中重写C++有多继承,多继承其实用好了很方便。C++多继承很容易出现 二一性比如:

类A { int a;}

类B:类A,类C:类A

类D : B, C那么int a到底是继承自谁的 单继承

24.解释KVC和KVO

Key value coding, Key value observer.

Kvc是路径访问的规范,kvo是观察某个变量的变化过程

KVO可以观察某个对象的变量变化过程,KVC是满足被观察的编 码规范。

KVC/KVO类似于代理,通知中心。都是一种通讯方法。

25.什么是单例模式单例就是在多个对象之间共享数据,类似于全局变量,比如数据 库打开一次,多个界面都可以使用

26. NSString *name = @”1000phone.com”,[name release]会出现什么 情况

这个代码不满足objective-c的内存管理黄金法则。没有alloc就release,

=========================》

extern   外部变量声明,是指这是一个已在别的地方定义过的对象,这里只是对变量的一次重复引用,不会产生新的变量。 static   静态数据,数据存放在全局数据区,但作用域只是本文件/函数 中,所以你可以在两个不同的文件/函数内部申明同名的static变量,但是它们是两个不同的全局变量。 如果是定义在函数内,那么该对象具有无链接,函数外不能对其访问。如果是定义在函数外,那么该对象具有内部链接,其它程序文件不能对其访问auto     普通局部栈变量,是自动存储,这种对象会自动创建和销毁 ,建议这个变量要放在堆栈上面,调用函数时分配内存,函数结束时释放内存。一般隐藏auto默认为自动存储类别。我们程序都变量大多是自动变量。register 寄存器变量,请求编译器将这个变量保存在CPU的寄存器中,从而加快程序的运行.系统的寄存器是有限制的,声明变量时如:register int i.这种存储类型可以用于频繁使用的变量。

27.列举所知道的iOS的API

28.列举所知道的iOS的类

29.列举所知道的iOS UI控件

30.解释C++/STL List、map、set、vectorlist =~ array

map =~ dictionary

set =~ nsset

vector =~ array

31. C/C++和OC怎么混用

.m -> .mm

32. POST请求的链接参数怎么拼接

POST参数有2中,一种文件POST一种非文件POST,对于非文 件POST格 式 (form-data/x-www-urlencoded) 是name=xxx&id=22&sxx=33

对于文件POST(multiple/form-data)

33. POST和GET有何区别

GET和POST都是HTTP请求方式的2中。

POST是安全的。GET是不安全的。GET是放在浏览器中地址暴露 出来了。POST不会。但是在App上GET和POST都看不见。GET和POST都是和服务器提交参数/通讯的一种方式。

GET参数不能太长<1024B POST没有限制<4G

GET不能上传文件,POST可以上传文件。

34.本地存储方式有哪几种

数据库,nsuserdefauts,file , plist,archieve归档 比较小的就放在nsuserdefaults(以文件设计的存放在Libraray中)数据库里面适合存放一条一条的记录

file一般存普通文件,图片,视频,音频等

plist存放比nsuserdefaults大一些的

归档nsarchieve可以存对象

35.解释OC里的id类型

id是泛型指针,可以指向任何oc类型,

id =~ NSObject *

id是objc_object的typedef,执行Class对象

36. retain、copy、readonly、readwrite的区别

retain对计数器+1 copy是创建一个新对象,readonly只产生getter函数,readwrite产生setter, getter函数

37. copy是深拷贝还是浅拷贝

copy缺省是浅拷贝.但是copy也可以做成深拷贝

38. copy和mutableCopy区别

copy是拷贝,mutableCopy是可变拷贝,比如把NSString通过mutableCopy变 成NSMutableString,把NSArray通 过mutableCopy变成NSMutableArray.

NSString -àNSMutableString, NSArrayàNSMutableArray,

NSDictionaryàNSMutableDictionary, NSData->NSMutableData;

39.怎么实现对象的本地存储

归档NSArchieve

HTTP启动一个NSUrlConnection在didFinish长连接,长期的和服务器保持连接。目的是为了避免每次都要连 接。因为和服务器连接的过程非常复杂。也耗时。所以连接一次。HTTP短连接只要处理完就断掉,下次重新连接 对服务器的负担 小.

长连接对服务器压力很大。

41.什么是Push Notification

42.遍历数组的三种方式有什么区别

for forin iterator

forin也叫快速循环。为什么他叫快速循环,原因是速度快?为什

么速度快?可以通过优化提前把forin里面的array数组数组全部

导入到cpu cache中。因为cache访问速度把内存快至少100倍

43. NSArray, NSDictionary这些是如何做的?

NSArray使用链表做的NSDictionary使用hash表做出来的

44. C++怎么调用C的方法

extern “C” int foo(){ };

45. Blocks语法有什么优点

Blocks类似于c中回调函数,和代理类似的,类似于java中的listener匿名函数

46. Frame和bounds有什么区别

Frame是子视图相对于父视图的坐标系统,x y width height, bounds是uiview自己的坐标系统bounds x y=0

47.什么叫异步下载,怎么实现图片的异步下载48.什么是缓存

49. ScrollView的复用机制

滚动过程中把scrollview里面的 超出屏幕的view放在重用队列中, 在滚动过程中如果有新的view进来,首先从重用队列中取得view, 如果没有就新创建一个。

50.什么是委托代理模式

委托代理是2个对象之间的一种通讯方式。一方使用协议,代理

另外一方实现协议,类似于回调,blocks等语法。 目的是为了软件设计的低耦合

51.什么是通知中心 通知中心是多对多的平等的通讯模式。主要用在多个对象之间松 耦合的通讯模式。对象和对象之间通过通知的名字就可以进行关 联通讯。

52.解释关键字static、const、inline、static inline、volatilestatic修饰变量表示静态变量,根据作用域 不同

extern和static是相反的。

Static修饰函数是表示函数在本文件有效

Static inline联合在一起表示内联函数。类似于宏

Const修饰变量和变量的内容只读

Volatile表示每次都从内存中真正的读取。主要是用于嵌入式中, 读取硬件。

53.如何实现2个线程 一个线程+1一个线程-1

int sum;

NSLock *sumLock; - (void) demo {

sumLock = [[NSLock alloc] init];

[NSThread detachNewThreadSelector:@selector(thread1:) toTarget:self withObject:nil]; [NSThread detachNewThreadSelector:@selector(thread2:) toTarget:self withObject:nil];

}

- (void) thread1:(id)arg {

while (1) { [sumLock lock];

sum++;

[sumLock unlock];

[NSThread sleepForTimeInterval:1]; }

}

- (void) thread2:(id)arg {

while (1) { [sumLock lock];

sum--;

[sumLock unlock];

[NSThread sleepForTimeInterval:0.5];

} }

54. OC中有私有方法吗?怎么实现

在.m文件中实现Category,只是在.m中方法

55. OC中有私有成员变量吗?怎么实现在.m文件中实现匿名类别Category

56.成员变量的作用域有哪几种@public, @protected, @private

57.数据库能不能存图片,怎么存?

可以存图片,nsdata存,但是我们一般不这样存,我们存路径把 图片存在沙盒中。

58.线程之间怎么通信?

59.线程生产者,消费者如何实现?

1个线程是生产者,一个是消费者如何实现这个模型.

NSMutableArray *dataList; NSLock *dataLock;

- (void) produceAndConsume {

dataList = [[NSMutableArray alloc] init];

dataLock = [[NSLock alloc] init];

[NSThread detachNewThreadSelector:@selector(produce:) toTarget:self withObject:nil]; [NSThread detachNewThreadSelector:@selector(consume:) toTarget:self withObject:nil];

}

- (void) produce:(id)arg {

int index = 0; while (1) {

NSNumber *n = [NSNumber numberWithInt:index++]; [dataLock lock];

[dataList addObject:n];

[NSThread sleepForTimeInterval:0.5];

} }

- (void) consume:(id)arg { while (1) {

if ([dataList count] > 0) { [dataLock lock];

id obj = [dataList objectAtIndex:0]; [dataList removeObject:0]; [dataLock unlock];

NSLog(@"消费obj %@", obj);

}

[NSThread sleepForTimeInterval:1]; }

}

60.不同屏幕怎么适配

iphone, iphone3G, iphone3GS 320x480

iphone4, iphoen4S 640x960 retina

iphone5, iphone5S, 640x1136

写程序需要有2套图片demo.png demo@2x.png iphone5适配.

1136/2-44-49

[[UIScreenmainScreen]applicationFrame] = (320x460, 320x548) [[UIScreenmainScreen]bounds] = (320x480, 320x568)

iPad, iPad2, iPad Mini 1024x768

iPad3, iPad4, 2048x1563

61.不同版本屏幕旋转怎么适配62.内存警告应该怎么做

尽量多的释放内存。把一些内容写到文件中,不要保存在内存中。63. iOS5, iOS6, iOS7区别

64. NSNotification是同步还是异步的

是同步的.如果需要异步 必须使用NSNotificationQueue实现

A notification center delivers notifications to observers synchronously. In other words, the postNotification: methods do not return until all observers have received and processed the notification. To send notifications asynchronously useNSNotificationQueue.

In a multithreaded application, notifications are always delivered in the thread in which the notification was posted, which may not be the same thread in which an observer registered itself.

Hope it helps you.

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

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,107评论 29 470
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,338评论 0 35
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,505评论 18 399
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 1,940评论 0 7
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,705评论 0 4