如何再分类中添加属性

 1 #import <UIKit/UIKit.h>
 2
 3 typedef enum {
 4     HMImageDirectionLeft, // 左边 0
 5     HMImageDirectionRight,// 右边 1
 6 } HMImageDirection;
 7
 8
 9 @interface UIImage (Extension)
10 // x值
11 @property(nonatomic,assign) CGFloat x;
12 // y值
13 @property(nonatomic,assign) CGFloat y;
14 // 移动方向
15 @property(nonatomic,assign) HMImageDirection direction;
16
17 @end
#import "UIImage+Extension.h"
#import <objc/runtime.h>
@implementation UIImage (Extension)

static char imageX;
static char imageY;
static char imageDirection;
- (void)setX:(CGFloat)x{
    // objc_setAssociatedObject:利用该方法可以给一个分类添加属性
    objc_setAssociatedObject(self, &imageX, [NSString stringWithFormat:@"%f",x], OBJC_ASSOCIATION_COPY);
}

- (CGFloat)x {
    return [objc_getAssociatedObject(self, &imageX) floatValue];
}

- (void)setY:(CGFloat)y {
    // objc_setAssociatedObject:利用该方法可以给一个分类添加属性
    objc_setAssociatedObject(self, &imageY, [NSString stringWithFormat:@"%f",y], OBJC_ASSOCIATION_COPY);
}

- (CGFloat)y {
    return [objc_getAssociatedObject(self, &imageY) floatValue];
}

- (void)setDirection:(HMImageDirection)direction {
    // objc_setAssociatedObject:利用该方法可以给一个分类添加属性
    objc_setAssociatedObject(self, &imageDirection, [NSString stringWithFormat:@"%d",direction], OBJC_ASSOCIATION_COPY);
}

- (HMImageDirection)direction {
     return [objc_getAssociatedObject(self, &imageDirection) boolValue];
}

@end
时间: 2024-10-17 12:14:38

如何再分类中添加属性的相关文章

category中添加属性的简单方式

一.概念扩充: 1.如我们所知,使用category是用来对现有类进行功能扩展,或者将类分成多模块的一种方式.由声明和实现两部分组成.可以单独写成Objiective-C File类型文件(包含.h和.m). 2.category可以用来给现有类添加新的方法. 3.category不可以给类添加成员,会直接报错(编译不过). 4.category可以用@property来添加属性,此种方式会自动生成对应属性的set和get方法的声明,但是没有set和get方法的实现,也不会自动生成带有“_”的属

iOS在一个分类中添加属性

有时候,我们会想在别人的类中添加一个属性.这个属性只会在自己的模块用到,在其它地方无用.那么现在就用两个方案: 1,直接在原类中添加一个属性 2,写一个分类,在分类中将这个属性加进去. 这两种方案实现的异同: 同:都能达到在已有的类中添加一个属性的需求. 异: 第一种方案优点:实现简单.缺点:破坏了已有的类的封装,会给后续开发者带来疑惑.结论:笨方法 第二种方案有点:能与已有类完全分开,保持了模块化的独立性.貌似没有缺点,如果一定要找出一个缺点,那就是一个字"难",因为要用到个高大上的

Android4.0.4-在build.prop中添加属性的方法【转】

本文转载自:http://blog.csdn.net/imyfriend/article/details/8939964 1.在*.rc文件中用setprop添加,例如在源码android4.0\system\core\rootdir\etc\init.goldfish.rc中有以下内容: setprop ARGH ARGH    setprop net.eth0.gw 10.0.2.2    setprop net.eth0.dns1 10.0.2.3    setprop net.gprs.

directshow filter中添加属性页

directShow 属性页的制作,为CBall filter加了一个属性页 具体为分以下步骤: 1.在要显示属性的类中继承现ISpecifyPropertyPages类,并实现此类的GetPages()函数. 如下所示:HRESULT STDMETHODCALLTYPE CBouncingBall::GetPages(CAUUID *pPages){  if (pPages == NULL) return E_POINTER;  pPages->cElems = 1;  pPages->pE

在类目中添加属性

.h文件 //分类的头文件 @interface ClassName (CategoryName) @property (nonatomic, strong) NSString *str;//此为新增的属性 //此为新增的属性 @end .m文件 //实现文件 #import "ClassName + CategoryName.h" #import <objc/runtime.h> static void *strKey = &strKey; @implementa

向属性文件中添加属性

public static void main(String[] args) { saveProperties("aa","bb"); } public static void saveProperties(String key,String value){ Properties p = new Properties(); p.setProperty(key, value); try { FileOutputStream out = new FileOutputSt

runtime-给系统已有类添加属性

在没有接触runtime之前,我们接触到的能给类进行扩展的方法有类目(category)和延展(extension)两种.类目(category)可以给系统已有类添加扩展方法但是不能添加属性,并且被添加的方法可以被此类的子类所继承:延展(extension)为我们的自定义类添加属性和方法,但是添加的属性和方法都是私有的,在此类的子类中是无法访问的.那么问题来了,如果我们想给系统已有类添加一些方便我们使用的属性要怎么办呢?上述这两种方法中能给系统已有类添加的东西的就只有类目(category)了.

PropertyGrid—添加属性Tab

零.引言 PropertyGrid用来显示和编辑对象的属性,前面已经简单介绍了如何使用该控件和提供不同的属性编辑方法.前面主要讲如何使用该控件,但有时,该控件无法满足我们的需求,就需要对其进行扩展.本文主要介绍如何在PropertyGrid中添加属性选项卡(PropertyTab).VS自带的属性框有属性和事件两个属性卡,下面简单说明如何添加自己的选项卡. 一.PropertyGrid的组成 在添加选项卡之前,先来看一看PropertyGrid的组成,分析其组成对后面设计十分有用.微软将Prop

【JavaScript】浅析JavaScript对象如何添加属性和方法

向JavaScript类中添加属性和方法,最直观的做法就是在类中定义属性和方法.JavaScript是一门弱语言,除了直接定义还可以用prototype来添加. 下面介绍从外部向JavaScript添加属性和方法的四种方法,首先定义一个类 function MyClass(){} 1,使用类名添加属性 MyClass.prototype.myname="吴兴国01"; 2,使用类名添加方法 MyClass.prototype.myfunc=function(){alert("