IOS开发常见面试题

转载 2015年07月10日 22:57:44

1.解释一下OC中的运行时。
1>runtime是什么:
runtime是一套比较底层的C语言API,属于1个C语言库,包含了很多底层的C语言API;平时编写OC代码,在程序运行过程中,其实最终都转换成了runtime的C语言代码,runtime是OC的幕后工作者。
2>代码举例:
OC:

[[Person alloc] init]

runtime:

objc_msgSend(objc_msgSend("person","alloc"),"init");

3>怎么用:
runtime属于OC的底层,可以进行一些非常底层的操作(用OC无法实现或者不好实现);在程序运行过程中,动态创建一个类(比如KVO的底层实现);在程序运行过程中,动态的添加一个类的属性或方法,修改属性或方法;遍历一个类的所有成员变量或属性或方法。
a.相关的头问价和函数
头文件:
*

#import "ClassName.h"
@interface ClassName ( CategoryName ) 
// method declarations 
@end

不过到现在为止,Category这个名字看起来仍然让人摸不着头脑——Category的中文是分类和范畴的意思——即便这个动态机制很强大,跟分类有什么关系呢?

这是因为利用这个机制,程序员可以把一堆方法分门别类,分成若干组,每组方法用一个Category名字加以命名,定义在同一个文件里。这个就是为什么把这个机制叫做Category的原因。

注意Category只能用于方法,不能用于成员变量。

理解了Category,Extension就不难理解了。Extension是Category的一个特例,其名字为匿名(为空),并且新添加的方法一定要予以实现。(Category没有这个限制)

6.利用[UIImage imageNamed:@”icon.png”]存在的问题
利用这种方法在application bundle的顶层文件夹寻找由供应的名字的图像。
如果找到图片,装载到iphone系统的缓存中,此时就意味着图片是放在内存里作为cache的。因此如果图片资源多了或者大了,此方式容易引起内存警告从而导致程序自动退出的问题。
我们可以通过直接读取文件路径[UIImage imageWithContentsOfFile]来解决这个问题,应用示例:
NSString *path = [[NSBundle mainBundle] pathForResource:@”icon” ofType:@”png”];
myImage = [UIImage imageWithContentsOfFiles:path];
注意:imageNamed方法是不能通过路径进行加载图片的,如果通过路径加载图片可以通过下面两个方法加载,一个是URL一个是FilePath
NSImage image = [[NSImage alloc] initWithContentOfURL:(NSURL )];
NSImage image = [[NSImage alloc] initWithContentOfFile:(NSString )];
用完以后[image release];

7.说说进程和线程的区别和联系,ios中有几种实现线程的方法,它们之间有什么区别?
进程是对正在运行的程序过程的抽象,程序本身就代表着一个进程。程序是指令、数据及其组织形式的描述,进程是程序的实体。线程是程序运行的基本单元(可以理解为一个进程中执行的代码片段),进程可以认为是一个容器,里面装的线程真正的在执行代码,完成功能。一个程序在运行的时候就是一个进程,一个进程中至少有一个线程。
ios中线程的实现有三种方式:苹果自带的NSThread、NSOperationQueue、GCD。
使用线程的好处:
a.使用线程可以把程序中占据时间长的任务放到子线程中去处理,如图片、视频的下载。
b.发挥多核处理器的优势,并发让系统运行的更流畅,用户体验更好。
使用线程的缺点:
a.更多地线程需要更多地内存空间。
b.当多个线程对同一资源出现争夺的时候要注意线程安全的问题。

iOS开发之OC最常见面试题总结

1.简述OC中内存管理机制 OC的内存管理机制是自动引用技术,内存管理的原则是谁开辟谁释放,分为ARC和MRC,MRC的话就是需要我们程序员手动管理内存,ARC不需要我们手动管理内存,系统会自行管理...
  • Star__shine
  • Star__shine
  • 2016年04月20日 20:12
  • 7150

iOS 最全的面试题~[有答案]

联系人:石虎  QQ: 1224614774 昵称:嗡嘛呢叭咪哄 方便学习 iOS 的朋友,在面试的时候一面而就,拿到高薪,...
  • shihuboke
  • shihuboke
  • 2017年06月01日 15:33
  • 1700

Java常见面试题汇总(一)

1)什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被...
  • u014492609
  • u014492609
  • 2016年03月27日 20:10
  • 1961

芒果iOS开发之高级面试题一

本文转载自《如何招聘一个靠谱的iOS》面试题来源是微博@我就叫Sunny怎么了的这篇博文:《招聘一个靠谱的 iOS》,其中共55题,除第一题为纠错题外,其他54道均为简答题。         主要目录...
  • CrazyZhang1990
  • CrazyZhang1990
  • 2015年12月25日 22:43
  • 2164

iOS开发面试题目(高级向)

最近在看喵神的博客 发现一个博客是写iOS的面试题目的。转载之。原地址:https://onevcat.com/2013/04/ios-interview/ 你使用过Objective-...
  • a316212802
  • a316212802
  • 2016年03月17日 16:17
  • 916

iOS开发笔记--超全!iOS 面试题汇总

作者:Job_Yang之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家。(题目来源于网络,侵删) Object-c的类可以多重继承么?可以实现多...
  • hopedark
  • hopedark
  • 2015年10月20日 16:53
  • 2110

芒果iOS开发之高级面试题二

索引 25. _objc_msgForward 函数是做什么的,直接调用它将会发生什么?26. runtime如何实现weak变量的自动置nil?27. 能否向编译后得到的类中增加实例变量?能否...
  • CrazyZhang1990
  • CrazyZhang1990
  • 2015年12月25日 22:53
  • 2280

iOS面试题系列之常见算法

iOS面试中熟悉常见算法1、 对以下一组数据进行降序排序(冒泡排序)。“24,17,85,13,9,54,76,45,5,63” int main(int argc, char *argv[]) {...
  • yangshebing21
  • yangshebing21
  • 2016年05月02日 00:27
  • 8599

iOS面试题2017

iOS面试小贴士 ———————————————回答好下面的足够了------------------------------------- 多线程、特别是NSOperation 和 GC...
  • Flying_in_the_world
  • Flying_in_the_world
  • 2017年05月22日 17:51
  • 1214

一些前端开发面试题

本文总结了一些常见前端面试(多数源于网络),希望阅后也要用心钻研其中的原理,重要知识需要系统学习,透彻学习,形成自己的知识链。 万不可投机取巧。只求当时过关,非长久之计也! 面试有几点需要注意:(...
  • u010874036
  • u010874036
  • 2016年06月03日 23:01
  • 3187
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS开发常见面试题
举报原因:
原因补充:

(最多只允许输入30个字)