IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> ios中部分关于分类,扩展,属性,深浅拷贝的一些问题 -> 正文阅读

[移动开发]ios中部分关于分类,扩展,属性,深浅拷贝的一些问题

1.分类都有哪些使用场合??

(1)可以减少单个类的体积,降低耦合性,同一个类可以多人进行开发
(2)可以为系统类添加分类进行拓展
(3)模拟多继承
(4)把静态库的私有方法公开

2.分类当中都可以添加哪些内容?

????????分类中只能添加方法,不能增加属性(因为分类的结构体中没有属性列表),原则上讲他只能添加方法,不能添加属性(成员变量),实际上他是可以通过其他方式来添加属性,比如runtime。但是使用runtime也只能实现setter和getter方法,而没有_成员变量,如果调用_成员变量,程序还是会报错。

3.在分类中添加属性有什么注意点?分类当中要怎么保存一个属性的值?

????????分类中只能添加方法,不能增加属性(因为分类的结构体中没有属性列表),原则上讲他只能添加方法,不能添加属性(成员变量)

????????分类添加的属性要生成get和set方法,不会自动产生私有变量。需要调用runtime里面的方法,进行关联对象。

  • 方法一:定义静态变量,采用静态变量的地址。
  • 方法二:直接使用get函数的地址

4.什么是扩展?

类扩展(extension)是category的一个特例,有时候也被称为匿名分类。他的作用是为一个类添加一些私有的成员变量和方法。

5.扩展和分类的区别?

1、类别原则上只能添加方法而不能添加属性(能添加属性的原因只是通过runtime解决无setter/getter方法的问题而已,如果调用_成员变量,程序还是会报错)。

2、类扩展不仅可以增加方法,还可以增加实例变量(或者属性),只是该变量默认是@private类型的。(所以作用范围只能在自身类,而不是子类或者其它地方)

3、类扩展中声明的方法没被实现,编译器会报警,但是类别中的方法没被实现编译器是不会有任何警告的,这是因为类扩展是在编译阶段被添加到类中,而分类是在运行时添加到类中。

4、类扩展不能像类别那样拥有独立的实现部分(@implementation部分),也就是说,类扩展所声明的方法必须依托对应类的实现部分来实现。

6.OC的属性关键字

7.什么时候会用到weak关键字?

主要是用在避免循环引用上

8.你了解的内存管理关键字具体使用对象

assign:修饰基本数据类型,如 NSInteger、BOOL、int、float 等;

weak:修饰弱引用,主要可以用于避免循环引用

strong:既可以修饰基本数据类型,也可以修饰对象类型

copy:用于 NSString、NSArray、NSDictionary 是为了保证赋值后是一个不可变对象,以免遭外部修改而导致不可预期的结果

9.copy关键字有使用过吗?具体做什么的?

用于 NSString、NSArray、NSDictionary 是为了保证赋值后是一个不可变对象,以免遭外部修改而导致不可预期的结果。

10.你对深浅拷贝理解吗?什么是深拷贝,什么是浅拷贝?

浅拷贝:浅拷贝是会将对象的每个属性进行依次复制,但是当对象的属性值 是引用类型时,实质复制的是其引用,当引用指向的值改变时也会跟着变化。

深拷贝:会克隆出一个对象,数据相同,但是引用地址不同(就是拷贝A对象里面的数据,而且拷贝它里面的子对象)

11.你对拷贝是怎样理解的?更具体点的问题:

(1)对NSString做copy是深拷贝还是浅拷贝

浅拷贝

(2)对NSString做一个mutablecopy

深拷贝

(3)对一个mutablearraycopy

深拷贝

(4)对一个mutablearray做Mutablecopy

深拷贝

具体可看下图

12.对自定义对象实现深拷贝操作怎样实现

实现NSCopying协议

13.你知道atomic和nonatomic的区别吗

Atomic 原子性(默认),编译器会自动生成互斥锁(以前是自旋锁,后面改为了互斥锁),对 setter 和 getter 方法进行加锁,可以保证属性的赋值和取值的原子性操作是线程安全的,但不包括操作和访问。

Nonatomic 非原子性,一般属性都用 nonatomic 进行修饰,因为 atomic 耗时。

14.Readwrite和readonly有什么区别?默认使用哪个关键字?

Readwrite:可读可写

Readonly:只读

默认可读可写

15.什么时候会使用到readonly这个属性关键字

为了达到封装的目的,我们应该只在确有必要时才将属性对外暴露,并且尽量把对外暴露的属性设为 readonly(tip:如果这时候想在对象内部通过 setter 修改属性,可以在类扩展中将属性重新声明为 readwrite;如果仅在对象内部通过 _ivar 修改,则不需要重新声明为 readwrite。)

16.copy方法生成的是一个可变对象还是不可变对象

??????? 不可变对象

17.strong关键字修饰的属性有什么特点?

能够持有对象,直接决定对象的存亡

18.强引用和弱引用有什么区别

19.Block什么时候会造成循环应用

比如当一个对象持有block,而该block又持有该对象时,类似下面的伪代码会照成循环引用:

[self?block:^{

????? self.value=1;

}];

20.循环引用会造成什么后果?

内存泄漏,对象无法被释放

21.怎么去解决循环引用

将其中一个对象用weak修饰

22.category 中有 +load 方法吗?+load 方法是什么时候调用的?+load 方法能继承吗????????

(1)分类中有+load方法;

(2)+load方法在Runtime加载类、分类的时候调用;

(3)load方法可以继承,但是一般情况下不会手动去调用+load方法,都是让系统自动调用。

?23.例如a用strong修饰引用b ?b用weak修饰引用a a释放了 b会释放吗

????????????????会被释放

??????? (1)那如果b对a也是用strong呢

????????????????由于被循环引用了,无法释放

?

?

?

?

?

?

?

?

?

?

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-26 12:12:28  更:2021-07-26 12:13:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/27 0:14:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码