IOS学习笔记十二(类别和扩展)

1、类别(category)和扩展

类别:OC动态特征许使用类别添加新的方法,不需要创建子类

扩展:和类别相似,扩展相对于匿名类别

 

 

 

 

2、使用格式

类别:
@interface 已有类(类别名)…@end
@implmentaion 已有类(类别名)…@end
扩展:
@imterface 也有类()
{实例变量
}
//方法...@end

 

 

 

 

3、哪些功能

1)、给一个现成的类增加类别,然后实现其方法

2)、模块化设计

3)、调用私有方法(没有在接口部分定义而是在类实现部分定义的方法相对于私有方法,不许调用),通过定义向前引用,实现对私有方法调用

 

 

 

 

 

 

 

4、测试类别Demo

NSNumer+fk.h
#ifndef NSNumber_fk_h
#define NSNumber_fk_h
#import <Foundation/Foundation.h>
@interface NSNumber(fk)
-(NSNumber *)add:(double)num2;
-(NSNumber *)sub:(double)num2;
@end#endif /* NSNumber_fk_h */

 

 

 

NSNumer+fk.m

#import <Foundation/Foundation.h>
#import "NSNumber+fk.h"@implementation NSNumber(fk)
-(NSNumber *)add:(double)num2
{return [NSNumber numberWithDouble:([self doubleValue] + num2)];
}
-(NSNumber *)sub:(double)num2
{return [NSNumber numberWithDouble:([self doubleValue] - num2)];
}
@end

 

MyApple.h

#import <Foundation/Foundation.h>#ifndef MyApple_h
#define MyApple_h
@interface MyApple : NSObject
@property (nonatomic, assign) double weight;
@property (nonatomic, copy) NSString *color;
//java方法构造方法一般没有返回,oc这里需要返回id,记住
-(id)initWithColor:(NSString *)color weight:(double)weight;
@end

 

 

 

 

MyApple.m

#import "MyApple.h"
//#import "MyApple+fk.h"#import <Foundation/Foundation.h>
@implementation MyApple
@synthesize color = _color;
@synthesize weight = _weight;
-(id)initWithColor:(NSString *)color weight:(double)weight
{if (self = [super init]){self.color = color;self.weight = weight;}return self;
}-(NSString *) description
{return [NSString stringWithFormat:@"<MyApple[color=%@, weight=%g]>", self.color, self.weight];
}
-(void)test
{NSLog(@"this is test method");
}
@end

 

 

 

MyApple+fk.h

#import "MyApple.h"#ifndef MyApple_fk_h
#define MyApple_fk_h
@interface MyApple(fk)
-(void)test;
@end
#endif /* MyApple_fk_h */

 

main.h

 

#import "MyApple.h"
#import "NSNumber+fk.h"
#import "MyApple+fk.h"int main(int argc, char * argv[]) {@autoreleasepool {NSNumber *num = [NSNumber numberWithDouble:3.5];NSLog(@"3.5 - 2 is %@", [num sub:2]);NSLog(@"3.5 + 2 is %@", [num add:2]);MyApple *apple = [[MyApple alloc] initWithColor:@"red" weight:5.6];NSLog(@"%@", apple);//No visible @interface for 'MyApple' declares the selector 'test'[apple test];}
}

 

 

 

 

 


5、运行类别结果

3.5 - 2 is 1.5
3.5 + 2 is 5.5
<MyApple[color=red, weight=5.6]>
this is test method

 

 

 

6、测试扩展的Demo

Car.h

#ifndef Car_h
#define Car_h#import <Foundation/Foundation.h>
@interface Car : NSObject
@property (nonatomic, copy) NSString *brand;
@property (nonatomic, copy) NSString *model;
-(void)drive;
@end
#endif /* Car_h */
 

 

Car+drive.h

#import "Car.h"
#ifndef Car_drive_h
#define Car_drive_h@interface Car()
@property (nonatomic, copy) NSString *color;
-(void)drive:(NSString *)owner;
@end#endif /* Car_drive_h */
 

 

 

Car.m

#import <Foundation/Foundation.h>
#import "Car+drive.h"@implementation Car
@synthesize brand;
@synthesize model;
@synthesize color;-(void)drive
{NSLog(@"%@汽车正在路上奔驰",self);
}
-(void)drive:(NSString *)owner
{NSLog(@"%@正驾驶%@汽车在路上奔驰", owner, self);
}
-(NSString *)description
{return [NSString stringWithFormat:@"<Car [brand=%@, model=%@, color=%@]>", self.brand, self.model, self.color];
}
@end
 

 

 

 

main.m

#import "Car+drive.h"
int main(int argc, char * argv[]) {@autoreleasepool {Car *car = [Car new];car.brand = @"奔驰";car.model = @"S300";car.color = @"red";[car drive];[car drive:@"chenyu"];}
}
 

 

 

 


7、运行扩展的结果

<Car [brand=奔驰, model=S300, color=red]>汽车正在路上奔驰
chenyu正驾驶<Car [brand=奔驰, model=S300, color=red]>汽车在路上奔驰

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289574.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Blazor University (7)组件 — 双向绑定

原文链接&#xff1a;https://blazor-university.com/components/two-way-binding/双向绑定源代码[1]注意&#xff1a; 如果您还没有这样做过&#xff0c;请在继续本节之前先执行单向绑定[2]中的步骤。到目前为止&#xff0c;我们有一个包含嵌入组件的页面&#xff0c;并且我们…

【iCore3 双核心板】例程二十二:LAN_UDP实验——以太网数据传输

实验指导书及代码包下载&#xff1a; http://pan.baidu.com/s/1kTPlJMJ iCore3 购买链接&#xff1a; https://item.taobao.com/item.htm?id524229438677 转载于:https://www.cnblogs.com/xiaomagee/p/5084291.html

想了好久 请多多指教

条件&#xff1a;假设A公司光纤入网&#xff0c;isp给的是静态ip,应该是公网ip吧然后搭建了DNS服务器和WEB服务器&#xff0c;&#xff08;当然自己建了个企业网站&#xff0c;备过案&#xff09;目的是在使全世界的客户都能访问到A公司的企业网站----------------------------…

喜欢的名言警句

有志者、事竟成&#xff0c;破釜沉舟&#xff0c;百二秦关终属楚&#xff1b; 苦心人、天不负&#xff0c;卧薪尝胆&#xff0c;三千越甲可吞吴。 1、If not now, when? If not me, who? ---马云 2、一个成功的创业者&#xff0c;三个因素&#xff1a;眼光、胸怀和实力。---…

tomcat出现5个using_当猫咪出现这5个迹象,主人就要给猫咪换猫粮了

养宠的朋友们你们知道吗&#xff1f;猫咪最好是要定期换粮&#xff0c;这样才有助于猫咪营养平衡&#xff0c;并且避免猫咪对单一食物感到厌烦哦&#xff01;但是应该多久给猫咪换一次粮呢&#xff1f;如果你家猫咪出现这5个迹象时&#xff0c;那就是提醒你需要更换猫粮了&…

C# Barrier类

对于同步&#xff0c;Barrier 类非常适用于其中工作有多个任务分支且以后又需要合并工作的情况。Barrier 类用于需要同步的参与者。激活一个任务时&#xff0c;就可以动态地添加其他参与者&#xff0c;例如&#xff0c;从父任务中创建子任务。参与者在继续之前&#xff0c;可以…

特斯拉宣布将在欧洲建设第二座超级工厂

北京时间11月9日早间消息&#xff0c;特斯拉CEO伊隆马斯克&#xff08;Elon Musk&#xff09;和首席技术官JB斯特罗贝尔&#xff08;JB Straubel&#xff09;本周在德国宣布了对德国工程集团Grohmann Engineering的收购。在随后的发布会上&#xff0c;马斯克强调&#xff0c;特…

IOS学习笔记十三(使用类别实现非正式协议)

1、协议 可以理解为java里面的接口 2、测试Demo NSObjectchenyu.h #ifndef NSObject_chenyu_h #define NSObject_chenyu_h #import <Foundation/Foundation.h>interface NSObject(chenyu) -(void)test; end#endif /* NSObject_chenyu_h */ Org.h #ifndef Org_h#defin…

c语言程序设计的顺序结构的常用控制语句,C语言程序设计教程-第03课-顺序结构的程序设计.ppt...

《C语言程序设计教程-第03课-顺序结构的程序设计.ppt》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《C语言程序设计教程-第03课-顺序结构的程序设计.ppt(21页珍藏版)》请在人人文库网上搜索。1、第3章 顺序结构的程序设计,3.1 顺序结构问题的提出 3.2 赋 值 语 句 3…

Android版哆啦A梦连连看游戏源码完整版

本代码主本人编写&#xff0c;没版权问题&#xff0c;另有其他少量小游戏和应用源码稍后会陆续上线!哆啦A梦连连看包括了2种游戏模式和60关卡&#xff0c;并可以通过修改配置文件很方便的实现自行增加新关卡。采用andengine游戏引擎开发&#xff0c;内置了趣米广告和用户统计fl…

javascript 高级程序设计_重读《JavaScript高级程序设计》

最近自己在休假&#xff0c;打算闭门几天将《JavaScript高级程序设计》(第3版)这本良心教材再回顾一遍。目前自己进入前端领域两年多&#xff0c;现在重读并记录下这本教材的“硬”知识点 。本文原文链接请戳 重读《JavaScript高级程序设计》​link.jianshu.com函数没有重载ECM…

[异常解决] ubuntu上安采用sudo启动的firefox,ibus输入法失效问题解决

采用sudo启动的应用是root权限的应用&#xff0c; ibus失效是因为ibus的初始配置采用user权限: 而root下运行的firefox输入法的配置还是停留在默认情况~ 解决方案是在shell下以root权限运行ibus&#xff0c;然后进行配置&#xff1a; 1、shell下输入&#xff1a;sudo ibus-setu…

Avalonia-.NET 的跨平台 UI 框架

简介Avalonia 是 dotnet 的跨平台 UI 框架&#xff0c;提供灵活的样式系统并支持 Windows、Linux、macOS 等多种操作系统。Avalonia 已经成熟并且可以投入生产。我们还在测试版中支持 iOS、Android&#xff0c;并在早期阶段通过 WASM 支持浏览器。使用在WPF中&#xff0c;当你在…

fun的用法c语言,fun的用法_fun的用法

fun有乐趣;玩笑等意思&#xff0c;那么你知道fun的用法吗?下面跟着货呼呼网阿呼一起来学习一下&#xff0c;希望对大家的学习有所帮助!fun的用法大全&#xff1a;fun的用法1&#xff1a;fun是不可数名词,没有复数形式,也不可加不定冠词,其后可接(in) v -ing。fun的用法2&#…

Skype for TV停止支持 三星确认今年6月移除该应用

微软热门视频聊天和语音通话服务Skype自今天开始将不再支持智能电视。用户无法在智能电视上登录或者重置密码。在停止支持之后&#xff0c;由电视制造厂商自行决定移除Skype应用或者继续提供非支持版本。三星已经确认将于2016年6月2日开始在旗下的智能电视中移除Skype服务&…

CactiEZ V10.1 中文版 Cacti中文解决方案+使用教程(2)

配置被监控的Windows主机说明&#xff1a;要使用CactiEZ监控一台Windows主机&#xff0c;需要在被监控的主机上面安装snmp&#xff08;简单网络管理协议&#xff09;1、下面开始安装配置snmp开始-设置-控制面板-添加或删除程序-添加删除Windows组件找到管理和监视工具&#xff…

IOS之学习笔记十四(协议的定义和实现)

1、正式协议的定义 protocol 协议名 <父协议1, 父协议2>{零个到多个方法定义} 一个协议可以有多个直接父协议&#xff0c;但协议只能继承协议&#xff0c;不能继承类 协议只有方法签名&#xff0c;没有方法实现 2、实现协议 interface 类名 : 父类 <协议1&#xff0…

【SPSS统计分析】运用spss软件进行问卷信度分析(附SPSS19.0简体中文版下载地址)

目 录 一、概念 二、信度指标 三、信度分析方法 四、利用SPSS进行信度分析 一、概念 信度是指根据测验工具所得到的结果的一致性或稳定性,反映被测特征真实程度的指标。一般而言,两次或两个测验的结果愈是一致,则误差愈小,所得的信度愈高,它具有以下特性: 1. 信度…

AgileConfig 1.6.0 发布 - 支持服务注册与发现

大家好&#xff0c;好久没有输出博文了&#xff0c;一是因为比较忙&#xff0c;另外一个原因是最近主要的精力是在给 AgileConfig 添加一个新的功能&#xff1a;服务注册与发现。先说说为什么会添加这个功能。我自己的项目是用 Consul 来做为服务注册发现组件的。自从我上线了 …