美文网首页iOS 进阶知识集
iOS - 关于动态绑定结构体属性

iOS - 关于动态绑定结构体属性

作者: Mitchell | 来源:发表于2016-06-23 12:16 被阅读908次

写工程的时候遇到个问题,想要在 category 中添加一个结构体的属性,自然会想到使用 runtime 的动态绑定,但是添加结构体属性会与别的属性有些不同,有几个注意点:

  • 首先应该讲值转成对象进行存储
  • 其次应该注意转成对象之后的保存策略模式
    以 CGRect 属性为例:
#import <UIKit/UIKit.h>
@interface UIViewController (PushPopMessage)
@property (nonatomic)CGRect pushFrame;
@end
#import "UIViewController+PushPopMessage.h"
#import <objc/runtime.h>
@dynamic pushFrame;
@implementation UIViewController (PushPopMessage)
-(void)setPushFrame:(CGRect)pushFrame{
    NSValue *value = [NSValue value:&pushFrame withObjCType:@encode(CGRect)];
    //因为已经把 pushFrame 作为对象进行存储 所以也应该将存储的策略模式设置为对象的策略模式
    objc_setAssociatedObject(self, @"pushFrame", value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(CGRect)pushFrame{
    NSValue *value = objc_getAssociatedObject(self, @"pushFrame");
    if(value) {
        CGRect rect;
        [value getValue:&rect];
        return rect;
    }else {
        return CGRectZero;
    }
}
  • 这样就可以拿到 pushFrame 了。

相关文章

  • iOS - 关于动态绑定结构体属性

    写工程的时候遇到个问题,想要在 category 中添加一个结构体的属性,自然会想到使用 runtime 的动态绑...

  • vue基础:属性动态绑定、事件动态绑定

    属性动态绑定 :[属性名字] 事件动态绑定 @[事件名字]

  • iOS 动态绑定属性

    如何在不破坏原有类封装下添加属性 当我们想给系统类或者自定义基类添加某个属性(简称targetVaule)时,在不...

  • angular 模板里面绑定属性

    1. 绑定静态属性 static property example 2. 绑定动态属性 动态属性绑定要用 [] /...

  • 使用__slots__实现动态绑定

    Python作为动态语言,可以实现动态绑定属性和实例方法等。 动态绑定属性 动态绑定实例方法 给一个实例绑定的方法...

  • v-bind之动态绑定

    1. v-bind 绑定基本属性 动态绑定img的src属性 动态绑定a的href属性 等等 语法糖写法(简写):...

  • Vue基础知识(三) - v-bind的其他使用

    关于Vue的v-bind指令还有其他的用法: 1.绑定style属性 2.动态绑定属性名 3.直接绑定对象 1.绑...

  • 绑定属性

    v-bind指令介绍 动态绑定属性:比如a元素的href属性,img元素的src属性 作用:动态绑定属性 缩写::...

  • Python:面向对象编程(进阶)

    类动态绑定方法与限定实例属性 类动态绑定方法 前面我们说了如何给类动态的添加属性,那么如何动态绑定方法呢?如下示例...

  • 2020-01-23

    绑定属性: *v-bind:动态绑定属性 语法糖:“:” 对象语法,数组语法

网友评论

本文标题:iOS - 关于动态绑定结构体属性

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