咨询热线

0371-86158370

iOS中扩展机制Category和associative

如果您正在寻找相关产品或有其他疑问,可随时拨打服务热线,或点击下方按钮与我们在线交流!

2022-02-21 17:40:05 发布者:爱博品牌软件
爱博品牌软件的小编今天为大家来分享最新的一篇热点问题,这篇文章是一篇软件开发资讯,那么文中有哪些精彩的信息呢,让我们进入正文吧! 在iOS开发中,有时候会遇到以下的问题,需要在一个类中添加自己的一些属性和方法。一般的做法是重写一个类来继承它,但是有时候就只是需要添加一些简单的属性和方法,那么这样做就显得过于麻烦,其实在iOS中还有更简单的方法,那就是Category.
用一个例子来简单介绍以下Category的用法。
1 @interface UIImageView (CategoryName)
只需要在interface中加上category的名称。
添加自定义的方法(Category)
我们来给UIImageView添加一个自定义的 speak 方法

1 2 3 4 5 @interface UIImageView (image)   - (void)speak:(NSString *)words;   @end
接下来就是对这个方法的实现

1 2 3 4 5 6 7 @implementation UIImageView (image)   - (void)speak:(NSString *)words {     NSLog(@"%@",words); } @end
一旦实现了该方法,那么就可以在UIImageView中直接调用 speak 方法
添加自定义的属性(associative)
添加自定义属性需要用到 associative
1 2 3 4 5 @interface UIImageView (title)   @property (nonatomic, strong) NSString *title;   @end
但是仅仅这样是没有办法使用的,还需要导入包 #import
用到了OC的运行时
1 2 3 4 5 6 7 8 9 10 11 @implementation UIImageView (title) static void * MyKey = (void *)@"MyKey"; - (NSString *)title {   return objc_getAssociatedObject(self, MyKey); } - (void) setTitle:(NSString *)title {   objc_setAssociatedObject(self, MyKey, title, OBJC_ASSOCIATION_COPY_NONATOMIC); } @end
然后实现该属性的get和set方法
Category的局限性
主要有两方面局限性:
(1)无法向类中添加新的实例变量,类别没有位置容纳实例变量。可以通过associative来解决
(2)名称冲突,即当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级。类别方法将完全取代初始方法从而无法再使用初始方法。这个类似于方法的重载,但是这里是直接覆盖了原方法
类别的作用
类别主要有3个作用:
(1)可以将类的实现分散到多个不同文件或多个不同框架中,方便代码管理。也可以对框架提供类的扩展(因为框架类没有源码,不能修改)。
(2)创建对私有方法的前向引用:如果其他类中的方法未实现,在你访问其他类的私有方法时编译器报错这时使用类别,在类别中声明这些方法(不必提供方法实现),编译器就不会再产生警告
(3)向对象添加非正式协议:创建一个NSObject的类别称为“创建一个非正式协议”,因为可以作为任何类的委托对象使用。
associative
associative是在运行时动态的添加属性,一般用的比较少。但是还是需要熟悉一下。
爱博品牌软件技术人员团队规模:目前在职技术人员300余名,其中软件开发技术人员占比65%,测试人员占比25%,售后及运维人员占比的10%,人才供给充足,并且具备各类开发语言、项目模式的承接经验,在所覆盖的行业及应用中具备成熟的解决方案和实施交付能力。主营业务:计算机软件开发、技术转让、技术咨询、技术服务;计算机信息系统集成;货物进出口、技术进出口。
相关产品
更多推荐
科技·质量·服务·创新

科技·质量·服务·创新

提交需求

如果您对我们的产品感兴趣,或者我们有什么可以帮助到您的,您可以随时在线与我们沟通。 当然您也可以在下面给我们留言,我们将热忱为您服务!

快速响应给予技术咨询答复

专业优质软件服务

成熟领先产品解决方案

专业可靠合作伙伴

免费咨询 0371-86158370
免费获取报价

获取报价

销售热线销售热线:0371-86158370

返回顶部

首页 在线咨询在线咨询 一键拨打一键拨打
南京客控系统 | 郑州科技有限 | 储能散热器 |