iOS開發 runtime使用場景

1. 消息

#import <objc/message.h>
#import <objc/runtime.h>
objc_msgSend((id)[Person class], @selector(walk));

2. 獲取所有方法,變量

objc_property_t * propertys = class_copyPropertyList(clazz, &outCount);

3. 交換方法(AOP)

[外部鏈接](http://note.youdao.com/noteshare?id=2ca674adf2eeece8fdd548e3458ef983)

4. 分類添加成員

const char key;
//使用runtime的方法,將分類中的,屬性set與get方法進行重寫,解決分類中不能夠聲明成員變量的這個問題
- (void)setExpand:(BOOL)expand
{
    //<#id object#> 傳進來的參數與誰關聯
    //const void *key 唯一標示
    //id value 關聯的內容是什么
    //objc_AssociationPolicy policy 以哪種約束方式進行關聯
    objc_setAssociatedObject(self, &key, @(expand), OBJC_ASSOCIATION_ASSIGN);
}
- (BOOL)expand
{
    //把包裝類轉換成基本數據類型后,在返回
    return [objc_getAssociatedObject(self, &key) boolValue];
}
- (void)spliteView
{
    if((self.expand = !self.expand))
    {
        self.view.transform = CGAffineTransformMakeTranslation(300, 0);
    }
    else
    {
        self.view.transform = CGAffineTransformIdentity;
    }
}

5. kvc的實現

6. 歸檔的實現

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容