文档章节

Objective-C ---Category

都英俊兮
 都英俊兮
发布于 2016/06/28 21:04
字数 276
阅读 20
收藏 0
oc

    Category:类扩展,就是给原有类的添加方法。

 

 

该例子给NSString添加一个属性(即添加setget方法)

 

类别。h中

@property (nonatomic,assign) NSInteger strID;

类别。m中

1.#import <objc/runtime.h> 导入必须头文件

2.定义一个全局变量

static const void *strIDKey = &strIDKey;

3.实现getset方法

-(void)setStrID:(NSInteger)strID{

   //  参数1: 给谁设置关联对象

   //  参数2: 关联对象唯一的key,获取时会用到

   //  参数3: 关联对象

   //  参数4: 关联策略,有以下几种:

typedef OBJC_ENUM(uintptr_t, objc_AssociationPolicy) {

    OBJC_ASSOCIATION_ASSIGN = 0,           /**< Specifies a weak reference to the associated object. */

    OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, /**< Specifies a strong reference to the associated object. 

                                            *   The association is not made atomically. */

    OBJC_ASSOCIATION_COPY_NONATOMIC = 3,   /**< Specifies that the associated object is copied. 

                                            *   The association is not made atomically. */

    OBJC_ASSOCIATION_RETAIN = 01401,       /**< Specifies a strong reference to the associated object.

                                            *   The association is made atomically. */

    OBJC_ASSOCIATION_COPY = 01403          /**< Specifies that the associated object is copied.

                                            *   The association is made atomically. */

};

    objc_setAssociatedObject(self, strIDKey, @(strID), OBJC_ASSOCIATION_ASSIGN);

    

}

 

 

-(NSInteger)strID{

    return [objc_getAssociatedObject(self, strIDKey) integerValue];

}

使用方法

导入类别的头文件即可

#import "NSString+douyingjunxi.h"

NSString *str = @"douyingjunxi";

        str.strID = 999;

        NSLog(@"%ld",str.strID);}

2016-06-28 21:02:54.453 阿四[1479:221383] 999

© 著作权归作者所有

都英俊兮
粉丝 2
博文 37
码字总数 11800
作品 0
深圳
iOS工程师
私信 提问
【Objective-C】探索Category底层的实质

  无论一个类设计的多么完美,在未来的需求演进中,都有可能会碰到一些无法预测的情况。那怎么扩展已有的类呢?一般而言,继承和组合是不错的选择。但是在Objective-C 2.0中,又提供了cat...

零零圈圈
07/13
0
0
从C#到Objective-C,循序渐进学习苹果开发(3)--分类(category)和协议Protocal的理解

本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验。本文继续上一篇随笔...

walb呀
2017/12/04
0
0
iOS OC中分类Category实现原理

//联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪哄 一、概念 1.前言 category是Objective-C 2.0之后添加的语言特性, category的主要作用是为已经存在的类添加方法。 2.设计思想 Objective-C ...

石虎132
2018/01/31
0
0
iOS的Target-Action模式传值的最佳方式

原文出处: talisk斯温的技术博客(@swaIn ) 在iOS中,所有的UIControl标准控件使用到最普遍最传统的执行方法的方式就是Target-Action,中文一般称作目标-动作,是比较常用的一种设计模式。...

刘星石
2016/04/14
219
0
Objective-C 学习笔记

1、 凡使用到@的地方,都是对标准C的扩展 2、 Objective-C的头文件包含与C++差不多,但可以通过@class实现跨文件依赖 Objective-C 是对C 的扩展,其扩展关键字列表如下 @class, @interface, ...

长平狐
2012/11/01
74
0

没有更多内容

加载失败,请刷新页面

加载更多

sync 包讲解

sync.Once Once 的作用是多次调用但只执行一次,Once 只有一个方法,Once.Do(),向 Do 传入一个函数,这个函数在第一次执行 Once.Do() 的时候会被调用,以后再执行 Once.Do() 将没有任何动作...

李琼涛
12分钟前
3
0
java中的byte占一字节或4字节

https://www.jianshu.com/p/2f663dc820d0

南桥北木
26分钟前
2
0
Cassandra 常用命令

Linux控制台命令 #进入Cassandra的安装目录 cd /home/db/cassandra/cassandra #进入Cassandra 无密码 ./bin/cqlsh localhost(IP)有密码 ./bin/cqlsh localhost(IP)-u 用户名 #显示所...

最菜最菜之小菜鸟
31分钟前
4
0
自建redis笔记

自建redis笔记 最近在linux安装了一下redis,特做一些笔记! 本文先单节点启动redis,然后再进行持久化配置,在次基础上,再分享搭建主从模式的配置以及Sentinel 哨兵模式及集群的搭建 单节点...

北极之北
39分钟前
3
0
扛住阿里双十一高并发流量,Sentinel是怎么做到的?

Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景 本文介绍阿里开源限流熔断方案Sentinel功能、原理、架构、快速入门以及相关框架比较 基本介绍 1 名词解释 服务限流 :当系统资源...

分布式系统架构
46分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部