美文网首页iOSSwift
iOS 利用运行时机制给现有类添加属性

iOS 利用运行时机制给现有类添加属性

作者: MrZhaoCn | 来源:发表于2017-01-21 13:05 被阅读18次

本文将介绍如何利用运行时机制动态给现有的类添加属性,分OC和Swift两个版本
一 OC版:OC给现有类添加属性只需要利用OC的分类机制就行,给现有类添加一个categery,然后利用runtime的两个api即可做到。现在我们给UIButton 添加一个image属性。
第一步给UIButton提供一个分类在分类的UIButton+Extension.h文件中代码如下:

#import <UIKit/UIKit.h>  
@interface UIButton (Extension)  
@property (nonatomic,strong)UIImage *image;  
@end

第二步,在分类的UIButton+Extension.m文件中利用runtime的api给出image的get和set方法:

#import "UIButton+Extension.h"  
#import <objc/runtime.h>  
@implementation UIButton (Extension)  
static const voidvoid *zc_image_key = @"zc_image_key";  
- (void)setImage:(UIImage *)image {  
    if (image != self.image) {  
        //添加新的  
        objc_setAssociatedObject(self, zc_image_key, image, OBJC_ASSOCIATION_RETAIN_NONATOMIC);  
    }  
}  
- (UIImage *)image {  
    return objc_getAssociatedObject(self, zc_image_key);  
}  
@end

第三步,使用:

 UIButton *button = [[UIButton alloc] init];  
 UIImage *image = [[UIImage alloc] init];  
 button.image = image;

二:swift版本可以利用extension,UIButton+Extension.swift具体代码如下:

import UIKit  
extension UIButton {  
    static let zc_image_key = UnsafeRawPointer.init(bitPattern: "zc_image_key".hashValue)  
    var image: UIImage? {  
        set {  
            objc_setAssociatedObject(self, UIButton.zc_image_key, newValue, .OBJC_ASSOCIATION_COPY_NONATOMIC)  
        }  
        get {  
            return  objc_getAssociatedObject(self, UIButton.zc_image_key) as? UIImage  
        }  
    }  
}

相关文章

  • iOS 利用运行时机制给现有类添加属性

    本文将介绍如何利用运行时机制动态给现有的类添加属性,分OC和Swift两个版本一 OC版:OC给现有类添加属性只需...

  • 2018-03-15 category(类别) 继承 Exten

    1:category category可以在运行时为现有的类添方法,不能添加属性和成员变量,但是利用运行时机制,可...

  • Add CGFloat property to Category

    给扩展类添加CGFloat类型的属性 IOS中可以使用运行时动态给类添加属性,对象类型的属性添加方法大家都知道 但...

  • runtime - 属性与成员变量

    利用运行时runtime机制,我们可以获取类文件的属性或者成员变量,还可以为类(当然包括某些分类)动态添加属性或者...

  • iOS 分类(Categories)

    简介: 分类是一种为现有的类添加新方法的方式。利用Objective-C的动态运行时分配机制,可以为现有的类添加新...

  • 面试问题之五:类别 扩展 继承

    类别 类别是一种为现有的类添加新方法的方式。 利用Objective-C的动态运行时分配机制,可以为现有的类添加新...

  • runtime常见问题

    1 . iOS runtime 运行时,动态添加属性方法首先, 要明白为什么要动态给类添加方法? 如果一个类方法很...

  • iOS category真的不能添加property吗?

    类别,网上一大堆的解释(利用Objective-C的动态运行时分配机制,可以为现有的类添加新方法,这种为现有的类添...

  • iOS Category常用类别分享(持续更新)

    前言 各位都知道,类别是一种为现有的类添加新方法的方式,利用Objective-C的动态运行时分配机制,可以为现有...

  • iOS 常用Category类别分享

    前言各位都知道,类别是一种为现有的类添加新方法的方式,利用Objective-C的动态运行时分配机制,可以为现有的...

网友评论

    本文标题: iOS 利用运行时机制给现有类添加属性

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