前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

2.24

作者头像
Originalee
发布2018-08-30 10:15:51
4450
发布2018-08-30 10:15:51
举报
文章被收录于专栏:编程之旅编程之旅
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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.03.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic 、atomic、strong、weak属性的作用?
  • 原子性:
  • 2、类变量中@protected、@private、@public、@package的声明各有什么定义?
  • 3、线程是什么?进程是什么?二者有什么区别和联系?
  • 4、谈谈你对多线程的理解?iOS中有几种实现多线程的方法?
  • 5、线程同步和异步的区别?iOS中如何实现多线程的同步?
  • 6、获取一台设备唯一标示的方法有哪些?
  • 7、iOS中可以使用多继承么?如果没有,可以用其他方式实现么?请简述其过程
  • 9、栈和堆的区别
  • 10、iOS本地数据存储有哪几种方式
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档