2.24

1.简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic 、atomic、strong、weak属性的作用?

oc中的内存管理机制:使用一种叫做引用计数的机制来管理内存中的对象。OC中每个对象都对应着他的引用计数,引用计数可以理解为一个整数计数器,当使用alloc方法创建对象时,引用计数器会自动设置引用计数为1,之后当你向对象发送retain消息时,引用计数+1,当你发送release消息时,引用计数-1,当引用计数为0时,�对象会释放自己所占有的内存。

retain(引用计数器+1)->release(引用计数器-1)

alloc(创建内存空间)->dealloc(释放内存空间)

readwrite 读写 (表示既有setter 也有getter) 默认 readonly 只读 (表示只有getter 没有setter)

assign 基础数据类型 不更改引用计数 copy 拷贝一个相同的对象,但是地址不同,引用计数+1

原子性:

nonatomic :不考虑线程安全 atomic: 线程操作安全(默认)

strong:在ARC的环境下,作用和MRC环境下的retain一样,引用计数器+1 (默认) weak:在ARC的环境下,作用和MRC环境下的assign一样,weak指向的内存区域被释放掉后,自动nil化,防止野指针泄露

2、类变量中@protected、@private、@public、@package的声明各有什么定义?

@private:作用范围只能作用在自身类 @protected:作用范围在自身类和继承它的子类(默认) @public:作用范围最大,可以在任何类被访问 @package:这个类,常用于框架类的实例变量,同一包内能用,跨包就不能用

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

一个程序运行,至少有一个进程,一个进程内,至少有一个线程。

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

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

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

区别:

  • 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。
  • 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。
  • 拥有资源: 进程是拥有资源的一个独立单位,而线程能访问隶属于这个进程的资源。
  • 系统开销: 在创建和撤销进程时,系统都要为之分配和回收资源,导致系统的开销,明显大于创建和撤销线程时的开销。
4、谈谈你对多线程的理解?iOS中有几种实现多线程的方法?

好处:

  • 使用线程可以把程序中运行时间长的任务,放到后台去执行。
  • 可以使用户界面更加吸引人,比如点击事件之后需要等待,可以弹出进度条来显示处理任务的进度。
  • 程序的运行速度可能会加快。
  • 在一些需要等待的任务上,线程就比较有优势。比如:用户输入,文字读写,网络加载等。

缺点:

  • 如果有大量的线程,可能会影响性能,因为系统需要在它们之间切换。
  • 更多的线程就需要有更多的内存空间。
  • 线程的中止,需要考虑其对程序运行的影响。
  • 通常块模型数据是在多个线程间共享的,需要防止线程死锁的情况发生。

实现多线程的方法: NSThread NSOperation GCD NSObject类方法

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

异步:举个例子就是播放电影,声音和画面是一起同步播放的。 同步:举个例子就是排队买东西,结账的时候必须前一个人付款结束才能轮到你。

实现多线程的同步: NSOperationQueue、NSConditionLock。

6、获取一台设备唯一标示的方法有哪些?
  • UDID (unique device identifier)
  • UUID (universally unique identifier)
  • 广告标示符
  • Vendor
  • Open UDID
  • MAC Adress(iOS7 之后弃用)

iOS7之后使用keyChain(钥匙串)

7、iOS中可以使用多继承么?如果没有,可以用其他方式实现么?请简述其过程

�Objective-C语言中不支持多继承,但是可以用类目protocol的方法来实现扩展原有类中的方法

9、栈和堆的区别

堆区的内存需要程序员手动释放 而栈区的内存是系统自动释放的

10、iOS本地数据存储有哪几种方式
  • NSKeyedArchive 归档
  • Write写入 Plist文件
  • SQLite3 数据库
  • CoreData

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏玄魂工作室

PHP代码审计Day2 - filter_var函数缺陷

--------------------------------------------------------------------------------...

13920
来自专栏Python爬虫与算法进阶

Python中的小魔法(二)

01 函数 局部变量 x = 66 def func(x): print('x等于', x) x = 6 print('局部变量x改变...

29140
来自专栏Hongten

JSP 三讲

51110
来自专栏Jacklin攻城狮

iOS,面试必看,最全梳理

目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了。今年,找过工作人可能会更深刻地体会到今年的就业形势不容乐观,加之,培训机构一火车地向用人单位输送...

25220
来自专栏CDA数据分析师

深入解读Python解析XML的几种方式

本文将介绍深入解读利用Python语言解析XML文件的几种方式,并以笔者推荐使用的ElementTree模块为例,演示具体使用方法和场景。文中所使用的Pytho...

30270
来自专栏Python爱好者

Java基础笔记11

14340
来自专栏大内老A

[WCF权限控制]利用WCF自定义授权模式提供当前Principal[原理篇]

在《通过扩展自行实现服务授权》一文中,我通过自定义CallContextInitializer的方式在操作方法之前之前根据认证用户设置了当前线程的安全主体,从而...

20480
来自专栏云计算教程系列

如何在Debian 9上使用Python 3设置Jupyter笔记本

Jupyter Notebook为交互式计算提供了一个命令shell作为Web应用程序。该工具可以与多种语言一起使用,包括Python,Julia,R,Hask...

25030
来自专栏从零开始学自动化测试

Selenium2+python自动化60-异常后截图(screenshot)

前言 在执行用例过程中由于是无人值守的,用例运行报错的时候,我们希望能对当前屏幕截图,留下证据。 在写用例的时候,最后一步是断言,可以把截图的动作放在断言这里,...

41350
来自专栏武军超python专栏

2018年8月29日学习mysql数据库的笔记

今天遇到的新单词: manual n手工的 correspond v符合一致 reject v拒绝 exist  v存在 solid adj固体的 ...

21950

扫码关注云+社区

领取腾讯云代金券