>

增添属性

- 编辑:澳门新葡亰平台游戏 -

增添属性

3、在完毕里面写要加多属性的getter、setter方法。

关联战略是个枚举值,解释如下:

  static void *key = &key;
  @implementation MyClass (Category)
   - (void)setTitle:(NSString *)title {
  objc_setAssociatedObject(self, & key, title, OBJC_ASSOCIATION_COPY); 
    }

   -(NSString *)title  {  
    return objc_getAssociatedObject(self, &key);  
}
 @end

遇见贰个难点,写了贰个分类,但原先类的习性非常不足用。增加一个属性,调用的时候崩溃了,说是找不到getter、setter方法。查了下文书档案发掘,OC的分类允许给分类增多属性,但不会自动生成getter、setter方法。有未有减轻方案吧?有,通过运营时创制关联援引。接下来以增加三个那样的本性为例:

  @interface MyClass (Category)
  @property (nonatomic, assign) NSString *title;
  @end

setStr:方法中接纳了多个objc_setAssociatedObject的主意,那几个艺术有八个参数,分别是:源对象,关联时的用来标识是哪叁本天性的key(因为你恐怕要丰硕非常多质量),关联的靶子和贰个涉嫌攻略。

1、引进运营时头文件。#import <objc/runtime.h>2、在无名氏分类或然头文件中加多属性。不相同是:佚名分类中增加的是个体属性,只在本类中能够动用,类的实例中不得以选取。头文件中增加的在类的实例中也足以应用。

  • OC的分类允许给分类增加属性,但不会自动生成setter和getter,可透过运营时确立关系援用,增加一个title属性,如下:

用来标识是哪八特品质的key常见有三种写法,但代码效果是一样的,如下:

  • 在贯彻里增加setter和getter:
//利用静态变量地址唯一不变的特性1、static void *strKey = &strKey;2、static NSString *strKey = @"strKey"; 3、static char strKey;
  • OC中分类增添属性的情况,在swift中也存在,那么大家看看swift中的完毕:
@implementation ClassName (CategoryName) -setStr:(NSString *)str { objc_setAssociatedObject(self, &strKey, str, OBJC_ASSOCIATION_COPY); } -(NSString *)str { return objc_getAssociatedObject(self, &strKey); }@end 
// MyClassExtension.swift
  class MyClass {
}

  private var key: Void?
  extension MyClass {
    var title: String? {
        get {
            return objc_getAssociatedObject(self, &key) as? String
        }

        set {
            objc_setAssociatedObject(self,
                &key, newValue,
                .OBJC_ASSOCIATION_COPY_NONATOMIC)
        }
    }
}

下篇见~

@property (nonatomic, copy) NSString *str;

.h文件

//分类的头文件@interface ClassName (CategoryName)@property (nonatomic, strong) NSString *str;@end
enum { OBJC_ASSOCIATION_ASSIGN = 0, //关联对象的属性是弱引用 OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, //关联对象的属性是强引用并且关联对象不使用原子性 OBJC_ASSOCIATION_COPY_NONATOMIC = 3, //关联对象的属性是copy并且关联对象不使用原子性 OBJC_ASSOCIATION_RETAIN = 01401, //关联对象的属性是copy并且关联对象使用原子性 OBJC_ASSOCIATION_COPY = 01403 //关联对象的属性是copy并且关联对象使用原子性};
//实现文件#import "ClassName + CategoryName.h"#import <objc/runtime.h>static void *strKey = &strKey;@implementation ClassName (CategoryName) -setStr:(NSString *)str { objc_setAssociatedObject(self, & strKey, str, OBJC_ASSOCIATION_COPY); } -(NSString *)str { return objc_getAssociatedObject(self, &strKey); }@end 
//分类的头文件@interface ClassName (CategoryName)//我要添加一个实例也可以访问的变量所以就写在这里了@property (nonatomic, strong) NSString *str;@end//匿名分类@interface ClassName ()@end

.m文件

4、实现后的欧洲经济共同体代码如下:

本文由java编程发布,转载请注明来源:增添属性