| |
|
开发:
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.分类当中都可以添加哪些内容?????????分类中只能添加方法,不能增加属性(因为分类的结构体中没有属性列表),原则上讲他只能添加方法,不能添加属性(成员变量),实际上他是可以通过其他方式来添加属性,比如runtime。但是使用runtime也只能实现setter和getter方法,而没有_成员变量,如果调用_成员变量,程序还是会报错。 3.在分类中添加属性有什么注意点?分类当中要怎么保存一个属性的值?????????分类中只能添加方法,不能增加属性(因为分类的结构体中没有属性列表),原则上讲他只能添加方法,不能添加属性(成员变量) ????????分类添加的属性要生成get和set方法,不会自动产生私有变量。需要调用runtime里面的方法,进行关联对象。
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 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 | -2025/4/11 21:42:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |