Objective-C相关特性

337 阅读1分钟

1、分类

使用
  • 声明私有方法
  • 分解体积庞大的类文件
  • 把Framework私有方法公开
特点
  • 运行时决议
  • 可以为系统类添加分类
添加内容
  • 实例方法
  • 类方法
  • 协议
  • 属性

2、关联对象

通过关联对象为分类添加“成员变量”
id objc_getAssociatedObject(id object, const void *key)

void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)

void objc_removeAssociatedObjects(id object)
关联对象有AssociationsManager管理并在AssociationsHashMap存储

3、扩展(Extension)

使用
  • 声明私有属性
  • 声明私有方法
  • 声明私有成员变量
特点
  • 编译时决议
  • 只以声明形式存在,多数情况下寄生于宿主类的.m中
  • 不能为系统类添加扩展

4、代理(delegate)

5、通知(NSNotification)

  • 使用观察者模式实现跨层消息传递
  • 一对多

6、KVO

  • Key-value observing
  • 观察者模式
  • 使用isa-swizzling实现 (面向切面编程的Aspects)
- (void)willChangeValueForKey:(NSString *)key;
...
- (void)didChangeValueForKey:(NSString *)key;

7、KVC

Key-value coding
- (id)valueForKey:(NSString *)key;
- (void)setValue:(id)value forKey:(NSString *)key;

8、属性关键字

  • 读写权限 (readonly / readwrite(默认))
  • 原子性 (atomic(默认) / nonatomic)
  • 引用计数 (retain / strong(默认) assign(默认) / unsafe_unretained(MRC) weak)
assign / weak
assign
  • 修饰基本数据类型
  • 修饰对象类型,不改变其引用计数
  • 会产生悬垂指针
weak
  • 不改变修饰对象的引用计数
  • 所指对象被释放后指针置为nil
copy

retain

MRC下重写retain修饰变量的setter方法

@property (nonatomic, retain) id obj;

- (void)setObj:(id)obj {
    if (_obj != obj) {
        [_obj release];
        _obj = [obj retain];
    }
}