面试篇之内存管理与多线程

简述OC中内存管理机制。­­­­­与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic 、atomic、strong、weak属性的作用?并区别strong(强引用)、 weak(弱引用)?什么情况使用copy,assign,和retain?

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

  • retain(引用计数加1)->release(引用计数减1)
  • alloc(申请内存空间)->dealloc(释放内存空间)
  • readwrite: 表示既有getter,也有setter   (默认)
  • readonly: 表示只有getter,没有setter
  • nonatomic:不考虑线程安全
  • atomic:线程操作安全   (默认)

线程安全情况下的setter和getter:

 1  - (NSString*) value  {    2             @synchronized(self) {        3             return [[_value retain] autorelease];   4   }5 }6    - (void) setValue:(NSString*)aValue {    7        @synchronized(self) {        8        [aValue retain];        9        [_value release];
10        _value = aValue;
11     }
12  }

  • retain: release旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
  • assign: 简单赋值,不更改索引计数    (默认)
  • copy: 其实是建立了一个相同的对象,地址不同(retain:指针拷贝  copy:内容拷贝)
  • strong:(ARC下的)和(MRC)retain一样    (默认)
  • weak:(ARC下的)和(MRC)assign一样, weak当指向的内存释放掉后自动nil化,防止野指针
  • unsafe_unretained 声明一个弱应用,但是不会自动nil化,也就是说,如果所指向的内存区域被释放了,这个指针就是一个野指针了。
  • autoreleasing 用来修饰一个函数的参数,这个参数会在函数返回的时候被自动释放。

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

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

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

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

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

2、            线程是什么?进程是什么?二者有什么区别和联系?

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

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

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

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

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

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

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

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

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

3.程序的运行效率可能提高

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

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

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

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

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

实现多线程的方法:

  1. NSObject类方法NSThreadNSOperationGCD

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

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

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

关键字@synchronized()

NSOperationQueue:maxcurrentcount

NSConditionLock

转载于:https://www.cnblogs.com/stronger-ios-lcx/p/5629855.html

iOS开发--面试总结(二)相关推荐

  1. iOS开发-定制多样式二维码

    iOS开发-定制多样式二维码   二维码/条形码是按照某种特定的几何图形按一定规律在平台(一维/二维方向上)分布的黑白相间的图形纪录符号信息.使用若干个与二进制对应的几何形体来表示文字数值信息. 最常 ...

  2. IOS开发学习周报(二)

    IOS开发学习周报(二) 简介 课程名称 IOS开发实训 任课老师 郑贵锋老师&字节跳动工程师 学号 16340015 专业(方向) 软件工程(计应) 姓名 陈彬彬 Email 9441312 ...

  3. iOS开发面试知识整理 – OC基础 (二)

    iOS | 面试知识整理 – OC基础 (二) 1.C和 OC 如何混编 xcode可以识别一下几种扩展名文件: .m文件,可以编写 OC语言 和 C 语言代码 .cpp: 只能识别C++ 或者C语言 ...

  4. iOS开发笔记(二):block循环引用

    写这篇文章的缘由是第一次面试时被问到了block循环引用的问题,当时回答的不是很好,首先要明确的是,block是否用copy修饰决定不了循环引用的产生,在此再一次进行补强,有不对的地方还请多多指教. ...

  5. iOS开发面试—四面字节iOS客户端抖音隐私合规团队

    一面 (1h30min) 自我介绍 什么时候接触iOS开发,学习路径 属性修饰符,nonnull这些也问了,strong,weak的区别,copy strong和copy一样吗 assign的语义,答 ...

  6. 2020年,iOS开发面试跳槽(必看攻略)

    1.引言 每年的3.4月份都是求职高峰时期,目前已进入5.6月份了,你已经成功换工作了吗? 这次我们想聊的,就是程序员跳槽这件事儿,我打算从三个方面来说: 1)程序员什么时候该跳槽? 2)跳槽前你需要 ...

  7. 2019暑期实习面试 - 腾讯PCG移动客户端iOS开发面试

    基本信息 事业群:PCG 岗位:移动客户端开发(iOS.Objective-C语言开发) 实习时间:6月份之后的暑期实习 面试日期:3月30日 - 3月31日 offer call:4月10日(看到很 ...

  8. iOS 开发面试通关指南:67 个必知问题!

    作者 | Artur Rymarz 译者 | 香槟超新星,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: 我们都知道,面试可能会让人感到压力山大--不管你是第一次参加面试的 ...

  9. IOS开发入门之二——第一个App

    如果你对怎么开始IOS开发都不懂的话,请看点下面的链接,先学习关于IOS开发环境的配置以及Swift语言入门: IOS开发入门之一--Swift语言基础     本章将教大家创建一个标准的苹果手机应用 ...

  10. iOS开发面试的43道最新面试题,让你稳拿大厂offer

    话不多说先看题,看看你能回答多少! 1:谈谈你对KVC的理解 2:iOS项目中引用多个第三方库引发冲突的解决方法 3:GCD实现多读单写 4:讲一下atomic的实现机制:为什么不能保证绝对的线程安全 ...

最新文章

  1. linux下修复bash漏洞
  2. android ble 助手源码_[源码和文档分享]基于Android的生活助手APP的设计与实现
  3. SQL查询存在一个表而不在另一个表中的数据
  4. 前端学习(3250):一个简单的文件
  5. jq ajax异步上传文件,jQuery插件ajaxFileUpload异步上传文件
  6. 从编写到上线带你搞定springboot博客之编辑博客时新增标签02
  7. 服务器安装时找不到驱动器,单位有台曙光的A840r-G服务器 由于之前做过RAID 所以在装系统时提前找不到硬盘驱动器...
  8. linun开启oracle监听,Linux下配置Oracle监听器
  9. MATLAB实现三边定位
  10. 9个前端常用的数据可视化库
  11. R语言使用lm函数构建线性回归模型、线性回归模型的诊断、使用influence.measures函数识别有影响力的观察值
  12. 利用python快速视频格式转换 解决 Premiere 导入TS文件只有声音没有视频
  13. java switch语句作用域,switch语句
  14. 博物馆360全景展厅无空间限制延伸会展空间
  15. 数据结构 Hash,哈希冲突,哈希聚集,BloomFilter,分布式一致性hash
  16. 如何让文字变成语音?推荐三个免费把文字变成音频软件
  17. 什么是最好的在线UML软件工具?
  18. git代码规范检测工具
  19. 神经网络架构搜索——二值可微分搜索(BATS)
  20. 免费使用office365和5TOneDrive空间

热门文章

  1. android 线程 wait notify
  2. 修改MSSQLServer的登陆方式
  3. 纳微科技完成近亿元融资,华兴医疗产业基金独家投资
  4. itoa函数的实现(不同进制)
  5. Windows文件操作的直接函数调用
  6. linux LVM的创建和管理
  7. 前端每周清单半年盘点之 WebAssembly 篇
  8. Python 学习之二: module, import 与 import as
  9. vmware horizon view 添加vcenter server
  10. 全检体系结构风格浅谈