iOS - RunTime(Swift)

RunTime实现存储属性(本质也是一个计算属性)

    //这么写是为了保护域空间
    private struct AssociatedKeys {
         static var isnew = "isnew"
    }
    
    var isNew:Bool{
        get{
            return  objc_getAssociatedObject(self, &AssociatedKeys.isnew) as! Bool
        }
        set{
            objc_setAssociatedObject(self, &AssociatedKeys.isnew, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_ASSIGN)
        }
    
    }

RunTime实现方法交换

   //初始化的时候调用一次
    public override class func initialize(){
        struct Static {
           static var onece:dispatch_once_t = 0
        }
        
        dispatch_once(&Static.onece) {//这里需要这么写
             let m1 = #selector(ViewController.viewDidLoad)
        let m2 = #selector(ViewController.newViewDidload)
        
        let mm1 = class_getInstanceMethod(type(of: self), m1)
        
        let mm2 = class_getInstanceMethod(type(of: self), m2)
        
        
        
        
        method_exchangeImplementations(mm1, mm2)
        }
    }

    //因为和viewDidload交换了,所以系统会调用这个方法,然后调用自己,就相当于调用原来viewDidload
    //一句话就是函数指正的交换,这里可能不是指针交换,而是指针指向内容里面的交换(没深究)
    func ove_viewDidLoad(){
        self.ove_viewDidLoad()
        print("ove_viewdidLoad")
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 9,112评论 7 64
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,135评论 19 139
  • 避免产生歧义的沟通方法 生活中很多矛盾的出现都是因为沟通产生了歧义。怎样避免沟通产生歧义呢?今天的学到两个小办法。...
    骑毛驴去拉萨k阅读 1,315评论 0 0
  • 有一个单身女孩子坚持在冬天喂流浪猫,一直坚持。到了春天,她家门口每天都会出现死老鼠,她对猫说,我啊不缺吃的就缺男朋...
    玖芊阅读 2,985评论 0 0
  • 任凭时光远去,雨雪风霜,依然会在不经意间,想起那次偶遇,想起那段往事,想起那最美的你。有一种情,无需常挂嘴边,想...
    非此阅读 3,926评论 21 13

友情链接更多精彩内容