Objective-C相關特性

一、分類

使用
  • 聲明私有方法
  • 分解體積龐大的類文件
  • 把Framework私有方法公開
特色
  • 運行時決議
  • 能夠爲系統類添加分類
添加內容
  • 實例方法
  • 類方法
  • 協議
  • 屬性

二、關聯對象

經過關聯對象爲分類添加「成員變量」
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存儲

三、擴展(Extension)

使用
  • 聲明私有屬性
  • 聲明私有方法
  • 聲明私有成員變量
特色
  • 編譯時決議
  • 只以聲明形式存在,多數狀況下寄生於宿主類的.m中
  • 不能爲系統類添加擴展

四、代理(delegate)

五、通知(NSNotification)

  • 使用觀察者模式實現跨層消息傳遞
  • 一對多

六、KVO

  • Key-value observing
  • 觀察者模式
  • 使用isa-swizzling實現 (面向切面編程的Aspects)
- (void)willChangeValueForKey:(NSString *)key;
...
- (void)didChangeValueForKey:(NSString *)key;
複製代碼

七、KVC

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

八、屬性關鍵字

  • 讀寫權限 (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];
    }
}
複製代碼
相關文章
相關標籤/搜索