252 阅读2分钟

由@protected引申的学习:

@private, 仅自己可访问
@protected, 自己和子类可访问
@public, 都可访问
@package, 主要是用于框架类,使用@private太限制,使用@protected或者@public又太开放,就使用这个package吧

由NSPointerArray,NSHashTable,NSMapTable引申的学习:

NSArray中添加一个对象,会使对象的引用计数加1,被NSArray持有

如果有需求在NSArray保持对象的弱引用,对象移除时,NSArray中也随之移除,那要怎么处理。

本文介绍NSPointerArray、NSHashTable、NSMapTable实现对象的弱引用。

在iOS6.0之后,由NSPointerArray类似于NSArray,有NSHashTable类似于NSSet,有NSMapTable为NSDictionary

NSPointerArrayNSArray对比学习:www.cnblogs.com/lxlx1798/p/…

  • 和传统 Array 一样,用于有序的插入或移除;
  • 与传统 Array 不同的是,可以存储 NULL,并且 NULL 还参与 count 的计算;
  • 与传统 Array 不同的是,count 可以 set,如果直接 set count,那么会使用 NULL 占位;
  • 可以使用 weak 来修饰成员;
  • 成员可以是所有指针类型;
  • 遵循 NSFastEnumeration,可以通过 for...in 来进行遍历。

https://juejin.cn/post/6844903529929244686

NSSetNSHashTable对比学习:
NSDictionaryNSMapTable对比学习:
NSMapTable可以理解为弱引用的字典,可以用来存储对象,该对象消失了也没有关系(创建NSMapTable时可选择keyValue的强弱引用等方式)

遇到Proxy的使用(xxxProxy:NSProxy),从而引申学习:使用NSProxyNSObject设计代理类的差异

https://blog.csdn.net/studying_ios/article/details/107590658****

初始化细节差别:NSProxy这个基类没有定义默认的init方法
Q: 为什么代理类用NSProxy设计 ( 继承自NSProxy)?
A: NSProxy更适合做为消息转发的代理类, 因为作为一个抽象类, NSProxy自身能处理的方法极小(仅接口中定义的部分方法), 所以其它方法都能够按照设计的预期被转发到被代理的对象中.