Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >iOS Extension Category Protrol 例子理解

iOS Extension Category Protrol 例子理解

作者头像
星宇大前端
发布于 2019-01-15 07:40:28
发布于 2019-01-15 07:40:28
45900
代码可运行
举报
文章被收录于专栏:大宇笔记大宇笔记
运行总次数:0
代码可运行

直接上代码

先读懂代码才能更好的理解含义。

Demo地址:https://github.com/RainManGO/ExtensionCateGoryProtrolDemo

目录:

Person类没有暴漏任何方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//
//  Person.h
//  ExtensionCateGoryProtrolDemo
//
//  Created by apple on 2017/12/14.
//  Copyright © 2017年 ZY. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Study.h"

@interface Person : NSObject<Study>

@end
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//
//  Person.m
//  ExtensionCateGoryProtrolDemo
//
//  Created by apple on 2017/12/14.
//  Copyright © 2017年 ZY. All rights reserved.
//

#import "Person.h"
#import <objc/runtime.h>

//这也是类扩展
@interface Person ()

@property(nonatomic,assign) int age;

@end

@implementation Person

-(void)logAge{
    self.age = 18;
    NSLog(@"%d",self.age);
}

-(void)Eat{
    NSLog(@"Eat");
}

-(void)Study{
    NSLog(@"Study");
}

-(void)setFriendName:(NSString *)name{
    objc_setAssociatedObject(self, @"friendName", name,OBJC_ASSOCIATION_COPY_NONATOMIC);
}

-(NSString *)friendName{
    return objc_getAssociatedObject(self, @"friendName");
}

@end

Category用runtime方法实现了可以设置属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//
//  Person+Run.h
//  ExtensionCateGoryProtrolDemo
//
//  Created by apple on 2017/12/14.
//  Copyright © 2017年 ZY. All rights reserved.
//

#import "Person.h"

@interface Person (Run)

@property(nonatomic,strong)NSString * name;

-(void)Run;

@end
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//
//  Person+Run.m
//  ExtensionCateGoryProtrolDemo
//
//  Created by apple on 2017/12/14.
//  Copyright © 2017年 ZY. All rights reserved.
//

#import "Person+Run.h"
#import <objc/runtime.h>

@implementation Person (Run)

-(void)Run{
    NSLog(@"Run");
}

-(void)setName:(NSString *)name{
    objc_setAssociatedObject(self, @"name", name,OBJC_ASSOCIATION_COPY_NONATOMIC);
}

-(NSString *)name{
    return objc_getAssociatedObject(self, @"name");
}

@end

单独的Extension文件相当于一个需要自己实现的Category(本例子已经在Person类实现):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//
//  Person+Eat.h
//  ExtensionCateGoryProtrolDemo
//
//  Created by apple on 2017/12/14.
//  Copyright © 2017年 ZY. All rights reserved.
//

#import "Person.h"

@interface Person ()

@property(nonatomic,copy)NSString * friendName;

-(void)logAge;

-(void)Eat;

@end

Protocol和Extension一样需要别人实现,我理解的区别是Extension必须要你扩展的类实现,而protocol谁遵守协议谁实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//
//  Study.h
//  ExtensionCateGoryProtrolDemo
//
//  Created by apple on 2017/12/14.
//  Copyright © 2017年 ZY. All rights reserved.
//

#import <Foundation/Foundation.h>

@protocol Study <NSObject>

-(void)Study;

@end

调用类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//
//  ViewController.m
//  ExtensionCateGoryProtrolDemo
//
//  Created by apple on 2017/12/14.
//  Copyright © 2017年 ZY. All rights reserved.
//

#import "ViewController.h"
#import "Person+Run.h"
#import "Extension/Person+Eat.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    Person  *  Mryang  = [Person new];
    Mryang.name =  @"Mryang";
    Mryang.friendName =@"MrsLu";
    NSLog(@"%@",Mryang.name);
    NSLog(@"%@",Mryang.friendName);
    
    [Mryang logAge];
    [Mryang Run];
    [Mryang Eat];
    [Mryang Study];
}



- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}


@end

打印结果可想而知。见demo

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年12月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
WordPress 技巧:提高 WordPress 搜索的相关性
实在扛不住 Google 自定义搜索的速度了,把我爱水煮鱼的搜索换回了 WordPress 自带的搜索,但是 WordPress 的默认搜索结果是按照文章的发布时间来排序的,这样的搜索结果的相关性并不强,应该让搜索结果按照内容相关性排序,而不是按照时间或者 ID,所以我们可以在当前主题的 functions.php 添加如下代码来增强 WordPress 搜索的相关性:
Denis
2023/04/15
3090
PSR-12 编码规范扩充
此规范起到继承,扩展和替换 PSR-2 的作用, 同时编码风格遵守 PSR-1 这个基础编码标准。
mousemin
2023/06/10
9120
Google Python 编码规范指南(建议收藏)
我是PythonGao。 一名微软工程师。今天给大家分享一下Google Python 编程规范。适合入门者学习。
龙哥
2019/05/21
4.3K0
WordPress二次开发之插件界面
上一篇文章介绍了WordPress后台的常用样式,这次给大家分享的是利用WordPress开发一个插件界面 效果图如下
切图仔
2022/09/14
6740
WordPress二次开发之插件界面
自定义wordpress侧边栏小工具
作者:matrix 被围观: 1,726 次 发布时间:2014-01-25 分类:Wordpress | 4 条评论 »
HHTjim 部落格
2022/09/26
3360
自定义wordpress侧边栏小工具
自己动手写 WordPress 插件 1:开始
WordPress 之所以被广泛应用,一个很重要的原因,它很有众多的插件,但是怎么撰写 WordPress 插件呢?今天开始给大家写一些原创性的文章:自己动手写插件,今天是第一篇,算是一个开始,从一个最简单插件开始,刚刚写好的,厉害吧!
Denis
2023/04/15
2950
PSR-2 编码规范
本规范希望通过制定一系列规范化 PHP 代码的规则,以减少在浏览不同作者的代码时,因代码风格的不同而造成不便。
申霖
2019/12/27
8160
PSR-2 编码规范
从WordPress SQLi谈PHP格式化字符串问题
近日,WordPress爆出了一个SQLi漏洞,漏洞发生在WP的后台上传图片的位置,通过修改图片在数据库中的参数,以及利用php的sprintf函数的特性,在删除图片时,导致'单引号的逃逸。漏洞利用较为困难,但思路非常值得学习。
Seebug漏洞平台
2018/03/09
1.1K0
从WordPress SQLi谈PHP格式化字符串问题
PHP 编码规范
该 PHP 编码规范基本上是同 PSR 规范的。有一部分的编码规范 PSR 中是建议,此编码规范会强制要求。 此编码规范 是以 PSR-1 / PSR-2 / PSR-2扩展 为蓝本,并增加了相应的细节说明。
wangxl
2018/07/27
3.8K1
WordPress主题下funtions.php的一段“恶意”代码
不多说了,相信有很多WordPresser都知道这段在WordPress主题下fountions.php的“恶意”代码,之所以为“恶意”加个双引号是想说:其实也不算太“恶意”,对你的伤害只是两点:1、感染wp-content\themes\下所有主题的fountions.php文件;2、以当前被感染博客的主页URL为标题和内容,向 livethemas@gmail.com发送邮件。已经知道的就不用往下看啦,还不知道的快去你的主题fountions.php检查有木有,有的话赶快删除之。话说这段恶意代码还真够长
Jeff
2018/01/19
1.2K0
如何开发一个简单的WordPress 插件
WordPress 是一个强大的内容管理系统(CMS),其灵活性和可扩展性使得它成为全球最受欢迎的网站构建平台之一。WordPress 插件是扩展 WordPress 功能的主要方式,开发一个插件不仅可以满足特定需求,还可以为其他用户提供便利。本文将详细介绍 WordPress 插件开发的各个方面,包括插件的基本结构、开发流程、常用 API、最佳实践等,帮助开发者从零开始掌握 WordPress 插件开发。
flyskyocean
2024/11/12
8670
WordPress6.1.0中文正式版及优化代码
WordPress,全球广泛使用的知名免费开源网站博客程序。WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设自己的网站,也可以把WordPress 当作一个内容管理系统(CMS)来使用。WordPress 还是一个免费的开源项目,在GNU通用公共许可证下授权发布。
回忆大大
2023/03/09
1.2K0
WordPress6.1.0中文正式版及优化代码
Javascript编码规范建议
示例: 解释: 声明包含元素的数组与对象,只有当内部元素的形式较为简单时,才允许写在一行。元素复杂的情况,还是应该换行书写。 示例:
Clearlove
2019/08/29
1.5K0
Javascript编码规范建议
深入解析sprintf格式化字符串带来的注入隐患!
对每个列进行dump但是dump下来不对,找了一波原因没有找到,开始用脚本跑 跑完后才发现sqlmap跑出来的列不对,应该是flag,于是
Java程序猿
2023/02/17
1.7K0
JavaScript 编程规范(二)
1. 总是使用 const 或 let 来声明变量。 不这样做会导致产生全局变量。 我们希望避免污染全局命名空间。
桃翁
2019/03/18
1.6K0
CVE-2022-21661:通过 WORDPRESS SQL 注入暴露数据库信息
今年 10 月,我们收到了来自 GiaoHangTietKiem JSC 的 ngocnb 和 khuyenn 的报告,涉及 WordPress 中的 SQL 注入漏洞。该漏洞可能允许攻击者暴露存储在连接数据库中的数据。此漏洞最近被解决为 CVE-2022-21661 ( ZDI-22-220 )。该博客涵盖了该错误的根本原因,并着眼于 WordPress 团队如何选择解决它。首先,这是一个演示该漏洞的快速视频:
Khan安全团队
2022/01/21
4.8K0
PSR-2 编码风格规范
本规范希望通过制定一系列规范化 PHP 代码的规则,以减少在浏览不同作者的代码时,因代码风格的不同而造成不便。
mousemin
2023/06/10
2980
Wordpress <= 4.9.6 任意文件删除漏洞
meta['thumb']来自与数据库,是图片的属性之一。代码未检查meta['thumb']的内容,直接带入unlink函数,如果
逍遥子大表哥
2021/12/17
1.4K0
Wordpress <= 4.9.6 任意文件删除漏洞
Wordpress安全架构分析
WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。Alexa排行前100万的网站中有超过16.7%的网站使用WordPress。到了2011年8月,约22%的新网站采用了WordPress。WordPress是目前因特网上最流行的博客系统。
Seebug漏洞平台
2018/03/16
1.8K9
Wordpress安全架构分析
分享WordPress各种标签大全集合 以及如何调用
wordpress程序日渐成熟,开发者越来越多,各种模版层出不穷,但是想要做一个好的wordpress模版,前提不只是要掌握HTML5前端技术,还必须了解wordpress的各种标签如何调用才可以。今天全百科网就把整理的WordPress各种标签以及是如何调用分享给大家。
于飞云计算
2019/07/22
3.4K0
分享WordPress各种标签大全集合 以及如何调用
相关推荐
WordPress 技巧:提高 WordPress 搜索的相关性
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验