iOS面试题1

而技术开发面试,问一些技术相关的问题是必须的,最新的技术可能人人都趋之若鹜,但有些原理和基础的也希望都有了解。



这里整理了一些iOS相关的面试题,(可能都已经老掉牙)但是也想跟大家分享下!

如果答案有出入或不准确的地方,也欢迎大家指正。



1.简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwritereadonlyassignretaincopynonatomic atomicstrongweak属性的作用? 

管理机制:使用了一种叫做引用计数的机制来管理内存中的对象。OC中每个对象都对应着他们自己的引用计数,引用计数可以理解为一个整数计数器,当使用alloc方法创建对象的时候,持有计数会自动设置为1。当你向一个对象发送retain消息 时,持有计数数值会增加1。相反,当你像一个对象发送release消息时,持有计数数值会减小1。当对象的持有计数变为0的时候,对象会释放自己所占用的内存。

retain(引用计数加1)->release(引用计数减1

alloc(申请内存空间)->dealloc(释放内存空间)

readwrite: 表示既有getter,也有setter   (默认)

readonly: 表示只有getter,没有setter

nonatomic:不考虑线程安全

atomic:线程操作安全   (默认)

线程安全情况下的settergetter

- (NSString*) value  {     

        @synchronized(self) {         

        return [[_value retain] autorelease];     

}} 

(void) setValue:(NSString*)aValue {     

   @synchronized(self) {         

   [aValue retain];         

   [_value release];         

   _value = aValue;     

}  }

retain: release旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1

assign: 简单赋值,不更改索引计数    (默认)

copy: 其实是建立了一个相同的对象,地址不同(retain:指针拷贝  copy:内容拷贝)

strong:ARC下的)和(MRCretain一样    (默认)

weak:ARC下的)和(MRCassign一样, weak当指向的内存释放掉后自动nil化,防止野指针

unsafe_unretained 声明一个弱应用,但是不会自动nil化,也就是说,如果所指向的内存区域被释放了,这个指针就是一个野指针了。
autoreleasing
用来修饰一个函数的参数,这个参数会在函数返回的时候被自动释放。

2.类变量的@protected ,@private,@public,@package,声明各有什么含义?

@private:作用范围只能在自身类

@protected:作用范围在自身类和继承自己的子类  (默认)

   @public:作用范围最大,可以在任何地方被访问。

@package:这个类型最常用于框架类的实例变量,同一包内能用,跨包就不能访问


3.线程是什么?进程是什么?二者有什么区别和联系? 

一个程序至少有一个进程,一个进程至少有一个线程:

进程:一个程序的一次运行,在执行过程中拥有独立的内存单元,而多个线程共享一块内存

线程:线程是指进程内的一个执行单元。

联系:线程是进程的基本组成单位

       区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
             (2)
并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
             (3)
拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
             (4)
系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

举例说明:操作系统有多个软件在运行(QQoffice、音乐等),这些都是一个个进程,而每个进程里又有好多线程(比如QQ,你可以同时聊天,发送文件等)



4.谈谈你对多线程开发的理解?ios中有几种实现多线程的方法?

好处:

1.使用线程可以把占据时间长的程序中的任务放到后台去处理

2.用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度

3.程序的运行速度可能加快

在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。

缺点:

1.如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换。

2.更多的线程需要更多的内存空间。

3.线程的中止需要考虑其对程序运行的影响。

4.通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生。

实现多线程的方法:

NSObject类方法

NSThread

NSOperation

GCD


5.线程同步和异步的区别?IOS中如何实现多线程的同步?

异步:举个简单的例子 就是游戏,游戏会有图像和背景音乐

同步:是指一个线程要等待上一个线程执行完之后才开始执行当前的线程,上厕所

NSOperationQueuemaxcurrentcount

NSConditionLock

GCD->http://blog.csdn.net/onlyou930/article/details/8225906 <br />



6.假设有一个字符串aabcad,请写一段程序,去掉字符串中不相邻的重复字符串,即上述字符串处理之后的输出结果为:aabcd

NSMutableString * str = [[NSMutableString alloc]initWithFormat;@“aabcad”];

for (int i = 0 ,i < str.length - 1 ;i++){

    unsigned char a = [str characterAtIndex:i];

    for (int j = i + 1 ,j < str.length ,j++){

        unsigned char b = [str characterAtIndex:j];

        if (a == b ){

            if (j == i + 1){

                }else{

                [str deleteCharactersInRange:NSMakeRange(j, 1)];

                }

            }

        }

    }

NSLog(@“%@”,str);


7.获取一台设备唯一标识的方法有哪些?

http://www.cnblogs.com/max5945/archive/2013/06/24/3152292.html<br />

(1)UDID

(2)UUID

(3)MAC Address

(4)OPEN UDID

(5)广告标识符

(6)Vindor标示符

*ios7以后使用keychain 

  

8.iOS类是否可以多继承?如果没有,那可以用其他方法实现吗?简述实现过程。

不可以多继承    protocol实现


9.堆和栈的区别?

堆需要用户手动释放内存,而栈则是编译器自动释放内存

问题扩展:要知道OCNSString的内存存储方式



10.iOS本地数据存储都有哪几种方式?

NSKeyedArchiver    

 NSUserDefaults

Write写入方式

 SQLite3

http://blog.csdn.net/tianyitianyi1/article/details/7713103<br />

(问题扩展:什么情况下使用什么样的数据存储)

1.NSKeyedArchiver:采用归档的形式来保存数据,数据对象需要遵守NSCoding协议,对象对应的类必须提供encodeWithCoder:initWithCoder:方法。缺点:只能一次性归档保存以及一次性解压。所以只能针对小量数据,对数据操作比较笨拙,如果想改动数据的某一小部分,需要解压或归档整个数据。

2.NSUserDefaults:用来保存应用程序设置和属性、用户保存的数据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包括:NSDataNSStringNSNumberNSDateNSArrayNSDictionary。缺点:如果要存储其他类型,需要转换为前面的类型,才能用NSUserDefaults存储。

3.Write写入方式:永久保存在磁盘中。第一步:获得文件即将保存的路径:第二步:生成在该路径下的文件:第三步:往文件中写入数据:最后:从文件中读出数据:

4. SQLite:采用SQLite数据库来存储数据。SQLite作为一中小型数据库,应用ios中,跟前三种保存方式相比,相对比较复杂一些。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高质量JAVA代码编写规范

1. Java 命名约定   除了以下几个特例之外&#xff0c;命名时应始终采用完整的英文描述符。此外&#xff0c;一般应采用小写字母&#xff0c;但类名、接口名以及任何非初始单词的第一个字母要大写。 1.1 一般概念   * 尽量使用完整的英文描述符   * 采用适用于相关领域的…

MFC中绘制动态曲线

参考&#xff1a; http://blog.csdn.net/zang141588761/article/details/50536788 [转载]MFC中画直线和曲线 一、画直线要想在MFC中画出有颜色的线条&#xff0c;首先就要设置DC的画笔&#xff0c;我们可以按如下方法来设置画笔&#xff1a;第一步&#xff1a;在View类中添加…

博客地址 RSS地址

博客地址 RSS地址 OneVs Den http://onevcat.com/atom.xml 破船之家 http://beyondvincent.com/atom.xml NSHipster http://nshipster.cn/feed.xml Limboy 无网不剩 http://feeds.feedburner.com/lzyy 唐巧的技术博客 http://blog.devtang.com/atom.xml Lex iOS notes http://i…

2015.11.27---Java

public class star{public static void main(String[] args) {System.out.print("ha");}}转载于:https://www.cnblogs.com/supermeimei/p/5001922.html

QT之深入理解QThread

QT之深入理解QThread 理解QThread之前需要了解下QThread类&#xff0c;QThread拥有的资源如下&#xff08;摘录于QT 5.1 帮助文档&#xff09;&#xff1a;在以上资源中&#xff0c;本文重点关注槽&#xff1a;start()&#xff1b;信号&#xff1a;started()、finished()&#…

常见人事问题

整体素养的常见问题 一、请你自我介绍一下你自己&#xff1f; &#xff08;面试官目的&#xff1a;深度了解求职者&#xff0c;看求职者基本的沟通和自我认知能力&#xff09; NO: 只说姓名、年龄、爱好等基本的信息后就没了。只重复简历里的内容&#xff0c;如工作经验就…

springMVC数据封装成POJO

springMVC把前台的数据封装为POJO与struts2的封装形式不同。struts2需要在控制器声明需封装的POJO&#xff0c;而springMVC不需要任何准备工作&#xff0c;只需在相应的方法的参数中加上需封装的POJO&#xff0c;当用户提交表单时&#xff0c;springMVC会根据表单中dom元素的na…

QT输入输出(四)之 QProcess

QProcess Qt提供了一个QProcess类用于启动外部程序并与之通信.这个类是异步工作的&#xff0c;而且在后台执行&#xff0c;这样用户界面就可以始终保持响应。 启动一个新的进程的操作非常简单,只需要将待启动的程序名称和启动参数传递给start()函数即可. 例如&#xff1a; QObj…

iOS 推送 逻辑

推送 阶段一&#xff1a;Provider[服务端]把要发送的消息&#xff0c;目的IOS设备标识打包&#xff0c;发送给APNS&#xff1b; 阶段二&#xff1a;APNS在自身的已注册Push服务的IOS设备列表中&#xff0c;查找有相应标识的IOS设备&#xff0c;并将消息发送到IOS设备&#xff1…

正则提取的url中的域名以及替换域名的方法 preg_match()和preg_replace()

<?php //网站的url$url http://www.baidu.com/index.php;//正则表达式$reg /(http):\/\/([^\/])/i;preg_match($reg, $url,$res);/** $res的结果array (size3)0 > string http://www.baidu.com (length20)1 > string http (length4)2 > string www.baidu.com (…

音视频开发

command s 截模拟器的屏幕 MP.4只是一个容器 H.264 H.263是真正的格式 H.265正在测试中 avi H.264 H.263 视频解码&#xff1a;将H.263 H.264转换为视频和音频的格式 视频编码&#xff1a; 解码&#xff1a;硬解码&#xff1a;GPU做的解码 CPU做除了图片以外的&#…

10.11 安装pod

原文地址&#xff1a;http://www.jianshu.com/p/5fc15906c53a 感谢。 更新升级10.11 cocoapods安装出问题最简单的解决方法 这是因为10.11把cocoapods直接干掉了 sudo gem install -n /usr/local/bin cocoapods 再加一句&#xff0c;完美解决 sudo xcode-select --switch /App…

windows任务管理器中的工作设置内存,内存专用工作集,提交大小详解

通俗的讲工作设置内存是程序占用的物理内存(包含与其他程序共享的一部分), 内存专用工作集是程序独占的物理内存, 提交大小是程序独占的内存(包含物理内存和在页面文件中的内存). 注:页面文件就是存放不在物理内存中的内存,文件路径一般在C:\pagefile.sys,目的是为了能够让更…

coreData mapView #include

一、coreData 需要导入系统库CoreData 新建文件的时候选core data 中的Data Model 然后加相应的表 加完表后 在Model.xcdatamodeld中新建文件 选coredata中的第三个 即可 如果两个表有联系 就将附表放到主表中 在build Setting中&#xff0c;输入search 在Framework Searc…

浅谈 C++ 中的 new/delete 和 new[]/delete[]

来自&#xff1a;http://www.cnblogs.com/hazir/p/new_and_delete.html 在 C 中&#xff0c;你也许经常使用 new 和 delete 来动态申请和释放内存&#xff0c;但你可曾想过以下问题呢&#xff1f; new 和 delete 是函数吗&#xff1f;new [] 和 delete [] 又是什么&#xff1f…

JavaScript中的原型继承原理

在JavaScript当中&#xff0c;对象A如果要继承对象B的属性和方法&#xff0c;那么只要将对象B放到对象A的原型链上即可。而某个对象的原型链&#xff0c;就是由该对象开始&#xff0c;通过__proto__属性连接起来的一串对象。__proto__属性是JavaScript对象中的内部属性&#xf…

XMPP

XMPP不支持视频聊天 支持文字聊天 但对于图片和语音聊天支持的不好 那么就将他们转成NSData的形式 IM Instance Message 即时聊天 聊天系统中 XMPP主要做两个人的聊天和群聊&#xff0c;只用了这两个功能 还有一个HTTP的服务器 &#xff0c;他是一个旁路服务器 XMPP底层…

QT 调试

QT调试&#xff08;参考下面的说明就可以正常调试&#xff09;&#xff1a;http://blog.csdn.net/wchengshen/article/details/50254731http://blog.csdn.net/sx341125/article/details/53606534 QT调用DLL&#xff1a; Qt中调用VS编译dll的方法(一)----显式调用 qt使用动态库(…

建模元件有哪些在MapleSim中

信号库&#xff1a;包含通用信号模块、布尔、控制器、离散信号模块、信号源、线性信号模块、非线性信号模块、时间离散信号模块、查询表、信号转换器、数学运算、关系元件、特殊信号模块&#xff0c;应用案例。 电子库&#xff1a;包含电阻、运算放大器、二极管、步进电机、模拟…

iOS小笔记

controller&#xff1a;连接二者的桥梁&#xff1b;cocoa frameworks 有两个框架&#xff1a;foundationfoundation 是cocoa中最基本的一些类&#xff1b;再mac应用程序中负责对象管理&#xff0c;内存管理&#xff0c;容器等相关数据&#xff1b;uikit&#xff1a;uikit&…