bruceyou1990-iOS学习日记-分类(Category) 和 扩展(Extension)
来源:互联网 发布:淘宝加购什么意思 编辑:程序博客网 时间:2024/05/17 05:17
1.分类(Category)
主要格式:类名+分类名 分类主要是为类(Car)扩展方法(run)这个分类我们写成Car+run
主要的价值在于不用知道类(car)做了什么事情为去添加一个分类(run)实现代码逻辑分离降低耦合性
创建分类
一在项目里面按command+N 在iOS Source选择 objective-C File
在弹窗里面 File Type: 选择Category Class:(你要写分类的类)创建好后有两个文件,中间有个 “类名+分类名”。
Car+run.h
#import "Car.h"@interface Car (run)- (void)run;@end
Car+run.m
#import "Car.h"@interface Car (run)- (void)run;@end
在ViewController里面导入 #import “Car+run.h”就可以通过Car这个实例调run这个方法
ViewController.m
#import "ViewController.h"import "Car+run.h"@class Car@interface ViewController@end@impelamation ViewController -(void)Viewdidload{[suoer viewdidload];Car *car=[[Car alloc]init];[car run];//这时候就可以通过Car的实例调用分类的run方法 }
分类 Category 添加属性
分类无法直接添加属性 直接添加之后自动生成声明方法 而不会实现方法但是可以通过runtime底层语言添加属性
导入#import<objc/runtime.h>才能在分类中添加属性并在Car+run.m里面这样写/** 属性的get方法 */- (NSString *)name{return objc_getAssociatedObject(self, _cmd);}/** 属性的set方法 */- (void)setName:(NSString *)name{objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_RETAIN);}
2.类扩展(Extension)简介
类扩展是分类的一个特例。
Extension是Category的一个特例。 表现特征为匿名,并且添加的方法一定要实现。(category可以不实现)。因此又叫匿名分类。可以为一个类添加额外的变量,方法或者合成属性。
扩展的价值:隐藏分类名不被发现
还是那前面那个Car 来举例
Car.h
#import <Foundation/Foundation.h>@interface Car : NSObject- (void)testRun;@end
Car_extension.h(Car要用到的 run work 方法 在这个扩展中声明 到 才Car的.m文件中实现这个方法)
Car_extension.h#import "Car.h"@interface Car (){ int _height;}- (void)run;- (void)work;@end
Car.m
#import "Car_extension.h"@interface Car(){ int _year;}- (void)run;@end@implementation Car- (void)work{ NSLog(@"使用年限%d",_year); NSLog(@"working。。。"); NSLog(@"高度多少位 :%d",_height);}- (void)run{ NSLog(@"running ...."); NSLog(@"%d",_year); -height=3;}- (void)testRun{ [self run]; NSLog(@"高度多少位 :%d",_height);}@end
0 0
- bruceyou1990-iOS学习日记-分类(Category) 和 扩展(Extension)
- iOS 分类(category)、扩展(Extension)
- 【IOS开发技术】 Objective-C分类 (category)和扩展(Extension)
- ios 分类(category)和类扩展(extension)详解
- Objective-C分类 (category)和扩展(Extension)
- Objective-C分类 (category)和扩展(Extension)
- 【Objective-C】分类 (category)和扩展(Extension)
- Objective-C分类 (category)和扩展(Extension)
- Objective-C分类 (category)和扩展(Extension)
- Objective-C分类 (category)和扩展(Extension)
- Object-C 分类(Category) 和 扩展(Extension)
- 分类(category)和类扩展(extension)
- iOS类别和扩展(Category和Extension)
- IOS中的类别(Category)和扩展(Extension)
- iOS类别(Category)和扩展(Extension)
- iOS分类(Category)和类扩展(Extension)的简单用法
- iOS分类(Category)和类扩展(Extension)的简单区别
- IOS 分类(category)、扩展(Extension)和继承(inheritance)的区别?
- 了解EventBus 3.0 (一)-订阅流程
- javascript中String的原生方法
- codeforces 702C Cellular Network
- Shader山下(十五)标准库函数
- 线性表的顺序存储与基本操作
- bruceyou1990-iOS学习日记-分类(Category) 和 扩展(Extension)
- LeetCode 318. Maximum Product of Word Length 解题报告
- oracle ORA-32701 hang分析(一)
- mac 解决mysql 乱码问题
- I2S概述
- javaScript基础知识点总结
- Linux之文件压缩gzip,bzip,tar等
- [leetcode]13. Roman to Integer
- 【Linux】root密码忘记终极解决方法