美文网首页
部分iOS基础知识(一)

部分iOS基础知识(一)

作者: 艾尔之光_熊 | 来源:发表于2021-04-08 10:52 被阅读0次

1.在定义 property 的时候atomic 和 nonatomic的区别及安全性问题

atomic 和 nonatomic 的区别在于:系统自动生成的 getter/setter 方法不一样。如果你自己写 getter/setter,那 atomic/nonatomic/retain/assign/copy 这些关键字只起提示作用,写不写都一样。

对于atomic的属性,系统生成的 getter/setter 会保证 get、set 操作的完整性(读写锁),不受其他线程影响。比如,线程 A 的 getter 方法运行到一半,线程 B 调用了 setter:那么线程 A 的 getter 还是能得到一个完好无损的对象。

而nonatomic就没有这个保证了。所以,nonatomic的速度要比atomic快。

不过atomic可并不能保证线程安全。如果线程 A 调了 getter,与此同时线程 B 、线程 C 都调了 setter——那最后线程 A get 到的值,3种都有可能:可能是 B、C set 之前原始的值,也可能是 B set 的值,也可能是 C set 的值。同时,最终这个属性的值,可能是 B set 的值,也有可能是 C set 的值。

保证数据完整性——这个多线程编程的最大挑战之一——往往还需要借助其他手段。

2.category与extension的区别

extension是在编译期决定,category由运行期决定,这就是他们不同的根本之处。它决定了他们之间的分工与区别。

extension的生命周期跟随主类,用于隐藏私有信息,你必须拥有这个类的实现/源码,你才可以为它添加extension。

category无法添加实例变量,在运行期间,对象内存布局已经确认,这时你无法破坏已经存在的内存空间,所以无法进行实例变量的添加。

3.KVC

KVC(key value coding)键值编码是一种可以使用字符串形式来间接操作对象相关属性的方法。KVC需要由 类别Category NSKeyValueCoding来支持,OC在实现KVC时没有采用实现接口的方式,而是针对NSObject创建了一个类别,通过这样的方式使得NSObject的子类可以自行实现NSKeyValueCoding类别定义的相关方法。

KVC使用非常简单,但KVC却异常强大,最暗黑的功能就是它可以无视访问限制,无论是否为private都可以进行赋值或取值操作,readonly的属性也可以无视,提供了一种比runtime更便捷的方式来修改或访问系统级隐藏的属性,因此,经常在开发中通过runtime获取相关属性名后使用KVC来修改那些只读readonly或隐藏的属性。

4.KVO

KVO(key value observing)键值监听是我们在开发中常使用的用于监听特定对象属性值变化的方法,常用于监听数据模型的变化从而可以动态的修改对应视图。能够上述需求的方法有很多,如Delegate和Notification都可以实现,但都有各自的优缺点和适用场景,需要根据实际情况按需选择,但三者都很重要,在开发中都会使用。

与KVC相同,OC在实现KVO时没有采用实现接口的方式,而是针对NSObject创建了一个类别,通过这样的方式使得NSObject的子类可以自行实现NSKeyValueObserving类别定义的相关方法,其他的如NSArray、NSSet这样的集合类也都定义了相关的类别,因此也可以对集合类型进行KVO的监听。

5.iOS的系统通知怎么实现

设置通知中心 //通知中心 单例  (整个工程中只能有一个通知中心) 

NSNotificationCenter

相关文章

  • 部分iOS基础知识(一)

    1.在定义 property 的时候atomic 和 nonatomic的区别及安全性问题 atomic 和 no...

  • iOS核心动画

    动画是iOS中非常有趣的部分,同时也是提升用户交互体验的有力工具,本文主要分为两个部分,第一个部分讲解基础知识,第...

  • iOS 知识点收集站

    部分内容转自 iOS基础知识点网址 类和对象 iOS 程序 main 函数之前发生了什么 谈ObjC对象的两段构造...

  • iOS开发小记

    这篇文章主要内容是整理了部分iOS开发基础知识和收集了一些iOS开发中的小技巧。由于平时自己没有养成做笔记的习惯,...

  • iOS 知识点收集站

    部分链接转自 iOS基础知识点网址 Objective-C基础 禅与 Objective-C 编程艺术 类和对象 ...

  • diary#面试准备

    2018.11.12 晴 1.今日主要看了socket编程方面的书籍以及iOS整体基础知识过了一下,大部分都忘了,...

  • #文章收集

    iOS ios 开源框架源代码解析ios 基础知识github源码40个国人 iOS技术博客iOS app上传官网...

  • angular笔记

    第一部分、基础知识--------------------------基础知识------------------...

  • iOS Realm数据持久化--Realm集合分页(四)

    iOS Realm数据持久化--Realm基础知识 (一)iOS Realm数据持久化--数据分页与复用原理 (二...

  • iOS蓝牙开发(一)蓝牙相关基础知识

    iOS蓝牙开发一 iOS蓝牙开发(一)蓝牙相关基础知识 蓝牙常见名称和缩写 MFI ======= make fo...

网友评论

      本文标题:部分iOS基础知识(一)

      本文链接:https://www.haomeiwen.com/subject/yagsoxtx.html