类别、延展、委托代理(16.5.12)
2016-05-12 19:23
309 查看
类别:
类别就是为已存在的类或自定义的类添加新的方法,但是不能添加实例变量;
取类别名的时候要做到“见名知意”;
延展:
延展就是定义自己的私有变量,私有对象以及私有方法。延展属于类的一部份。
创建方式:
通过创建新的文件,选择延展类来创建;
直接在类的.m文件中创建;
委托代理:
委托需要协议来支持;
协议只声明了方法但不去实现,由委托的对象负责实现;
协议由@protocol来声明,协议名称一般用" 类名+Delegate";
协议中的方法分必须时间@required和可选实现@optional之分。
类别:
NSMutableArray+AddNumber.h文件
#import <Foundation/Foundation.h>
@interface NSMutableArray (AddNumber)
//注意:类别只能添加方法,不能添加实例变量,对象,属性
//类别方法
- (void)addNumber:(int)num;//添加整型
- (int)numberAtIndex:(int)index;//根据索引返回指定数组元素
- (void)removeNumberAtIndex:(int)index;//根据索引删除指定数组元素
@end
NSMutableArray+AddNumber.m文件
#import "NSMutableArray+AddNumber.h"
@implementation NSMutableArray (AddNumber)
//给哪个类添加类别,当前self指的就是这个类对象本身
//添加整型
- (void)addNumber:(int)num
{
[selfaddObject:[NSNumbernumberWithInt:num]];
}
//根据索引返回指定数组元素
- (int)numberAtIndex:(int)index
{
NSNumber *number = [selfobjectAtIndex:index];
return [number
intValue];
}
//根据索引删除指定数组元素
- (void)removeNumberAtIndex:(int)index
{
[selfremoveObjectAtIndex:index];
}
@end
延展:
student.h文件:
#import <Foundation/Foundation.h>
@interface Student :
NSObject
@property (nonatomic,strong)
NSString *name;
@property (nonatomic)int age;
/**
@功能:初始化学生对象
@参数:姓名年龄
性别班级
@返回值:当前对象
*/
- (id)initWithName:(NSString*)name age:(int)age sex:(char)sex banji:(NSString*)banji;
/**
@功能:显示详细信息
@参数:无
@返回值:无
*/
- (void)showInfomation;
@end
student.m文件:
#import "Student.h"
#import "Student_StudentExtension.h"
//@interface Student()
//{
// //延展中可定义变量和对象
// char _sex;
// NSString *_banji;
//}
//
////延展中可定义属性
//@property (nonatomic) char sex; //性别
//@property (nonatomic, strong) NSString *banji; //班级
//
//
///**
// @功能:显示更多学员信息
// @参数:无
// @返回值:无
// */
//- (void)showMoreInfomation;
//
//@end
@implementation Student
@synthesize name = _name;
@synthesize banji = _banji;
- (void)dealloc
{
self.name =nil;
self.banji =nil;
[super dealloc];
}
/**
@功能:初始化学生对象
@参数:姓名年龄
性别班级
@返回值:当前对象
*/
- (id)initWithName:(NSString*)name age:(int)age sex:(char)sex banji:(NSString*)banji
{
self = [superinit];
if (self) {
self.name = name;
self.age = age;
//使用了延展的属性
self.sex = sex;
self.banji = banji;
}
return
self;
}
/**
@功能:显示详细信息
@参数:无
@返回值:无
*/
- (void)showInfomation
{
NSLog(@"姓名:%@年龄:%d",self.name,self.age);
[selfshowMoreInfomation];
}
/**
@功能:显示更多学员信息
@参数:无
@返回值:无
*/
- (void)showMoreInfomation
{
NSLog(@"性别:%c班级:%@",self.sex,self.banji);
}
@end
Student_StudentExtension.h文件:
#import "Student.h"
@interface Student()
{
//延展中可定义变量和对象
char _sex;
NSString *_banji;
}
//延展中可定义属性
@property (nonatomic)char sex;
//性别
@property (nonatomic,strong)
NSString *banji;//班级
/**
@功能:显示更多学员信息
@参数:无
@返回值:无
*/
- (void)showMoreInfomation;
@end
类别、延展总结: 类别只能加方法。延展都可以加。//给哪个类添加类别,当前self指的就是这个类对象本身 延展只能定义自己的私有变量,私有对象和私有方法。 延展属于类的一部分。(可以创建新文件,也可以在。m文件中创建)。创建的时候只有一个。h文件。都在类的。m里面实现。(为自己服务)。
委托代理:
1,写协议
2,写协议必须或可选实现的方法。
3,委托对象创建;
4,协议确认;
5,实现委托。
具体步骤如下:(123步)
//协议
@protocol CustomerDelegate <NSObject>//协议名=类名+Delegate
//协议必须实现的方法
@required
- (void)food:(NSString*)foodMsg;
- (void)water:(NSString*)waterMsg;
//协议可选实现的方法
@optional
- (void)moreFood:(NSString*)msg;
- (void)moreWater:(NSString*)msg;
@end
@interface Customer :
NSObject
@property (nonatomic,assign)
id<CustomerDelegate> delegate;//委托对象, assign表示弱引用,不拥有对象的使用权,不会让对象引用计数值加1
- (void)prepareEatFood;
//准备吃饭
@end
(4步)
#import <Foundation/Foundation.h>
#import "Customer.h"
@interface Cooker :NSObject <CustomerDelegate>//<CustomerDelegate>表示确认协议
@end
(5步)
- (id)init
{
if (self=[superinit]) {
NSLog(@"来了一个顾客");
Customer *aCustomer = [[Customeralloc]
init];//来了一个顾客
aCustomer.delegate =
self;//顾客选定厨师 (这里就是委托)
[aCustomer prepareEatFood];//顾客准备点餐
[aCustomer release];//顾客吃完后离开餐馆
}
return
self;
}
//...........// 执行的方法
类别就是为已存在的类或自定义的类添加新的方法,但是不能添加实例变量;
取类别名的时候要做到“见名知意”;
延展:
延展就是定义自己的私有变量,私有对象以及私有方法。延展属于类的一部份。
创建方式:
通过创建新的文件,选择延展类来创建;
直接在类的.m文件中创建;
委托代理:
委托需要协议来支持;
协议只声明了方法但不去实现,由委托的对象负责实现;
协议由@protocol来声明,协议名称一般用" 类名+Delegate";
协议中的方法分必须时间@required和可选实现@optional之分。
类别:
NSMutableArray+AddNumber.h文件
#import <Foundation/Foundation.h>
@interface NSMutableArray (AddNumber)
//注意:类别只能添加方法,不能添加实例变量,对象,属性
//类别方法
- (void)addNumber:(int)num;//添加整型
- (int)numberAtIndex:(int)index;//根据索引返回指定数组元素
- (void)removeNumberAtIndex:(int)index;//根据索引删除指定数组元素
@end
NSMutableArray+AddNumber.m文件
#import "NSMutableArray+AddNumber.h"
@implementation NSMutableArray (AddNumber)
//给哪个类添加类别,当前self指的就是这个类对象本身
//添加整型
- (void)addNumber:(int)num
{
[selfaddObject:[NSNumbernumberWithInt:num]];
}
//根据索引返回指定数组元素
- (int)numberAtIndex:(int)index
{
NSNumber *number = [selfobjectAtIndex:index];
return [number
intValue];
}
//根据索引删除指定数组元素
- (void)removeNumberAtIndex:(int)index
{
[selfremoveObjectAtIndex:index];
}
@end
延展:
student.h文件:
#import <Foundation/Foundation.h>
@interface Student :
NSObject
@property (nonatomic,strong)
NSString *name;
@property (nonatomic)int age;
/**
@功能:初始化学生对象
@参数:姓名年龄
性别班级
@返回值:当前对象
*/
- (id)initWithName:(NSString*)name age:(int)age sex:(char)sex banji:(NSString*)banji;
/**
@功能:显示详细信息
@参数:无
@返回值:无
*/
- (void)showInfomation;
@end
student.m文件:
#import "Student.h"
#import "Student_StudentExtension.h"
//@interface Student()
//{
// //延展中可定义变量和对象
// char _sex;
// NSString *_banji;
//}
//
////延展中可定义属性
//@property (nonatomic) char sex; //性别
//@property (nonatomic, strong) NSString *banji; //班级
//
//
///**
// @功能:显示更多学员信息
// @参数:无
// @返回值:无
// */
//- (void)showMoreInfomation;
//
//@end
@implementation Student
@synthesize name = _name;
@synthesize banji = _banji;
- (void)dealloc
{
self.name =nil;
self.banji =nil;
[super dealloc];
}
/**
@功能:初始化学生对象
@参数:姓名年龄
性别班级
@返回值:当前对象
*/
- (id)initWithName:(NSString*)name age:(int)age sex:(char)sex banji:(NSString*)banji
{
self = [superinit];
if (self) {
self.name = name;
self.age = age;
//使用了延展的属性
self.sex = sex;
self.banji = banji;
}
return
self;
}
/**
@功能:显示详细信息
@参数:无
@返回值:无
*/
- (void)showInfomation
{
NSLog(@"姓名:%@年龄:%d",self.name,self.age);
[selfshowMoreInfomation];
}
/**
@功能:显示更多学员信息
@参数:无
@返回值:无
*/
- (void)showMoreInfomation
{
NSLog(@"性别:%c班级:%@",self.sex,self.banji);
}
@end
Student_StudentExtension.h文件:
#import "Student.h"
@interface Student()
{
//延展中可定义变量和对象
char _sex;
NSString *_banji;
}
//延展中可定义属性
@property (nonatomic)char sex;
//性别
@property (nonatomic,strong)
NSString *banji;//班级
/**
@功能:显示更多学员信息
@参数:无
@返回值:无
*/
- (void)showMoreInfomation;
@end
类别、延展总结: 类别只能加方法。延展都可以加。//给哪个类添加类别,当前self指的就是这个类对象本身 延展只能定义自己的私有变量,私有对象和私有方法。 延展属于类的一部分。(可以创建新文件,也可以在。m文件中创建)。创建的时候只有一个。h文件。都在类的。m里面实现。(为自己服务)。
委托代理:
1,写协议
2,写协议必须或可选实现的方法。
3,委托对象创建;
4,协议确认;
5,实现委托。
具体步骤如下:(123步)
//协议
@protocol CustomerDelegate <NSObject>//协议名=类名+Delegate
//协议必须实现的方法
@required
- (void)food:(NSString*)foodMsg;
- (void)water:(NSString*)waterMsg;
//协议可选实现的方法
@optional
- (void)moreFood:(NSString*)msg;
- (void)moreWater:(NSString*)msg;
@end
@interface Customer :
NSObject
@property (nonatomic,assign)
id<CustomerDelegate> delegate;//委托对象, assign表示弱引用,不拥有对象的使用权,不会让对象引用计数值加1
- (void)prepareEatFood;
//准备吃饭
@end
(4步)
#import <Foundation/Foundation.h>
#import "Customer.h"
@interface Cooker :NSObject <CustomerDelegate>//<CustomerDelegate>表示确认协议
@end
(5步)
- (id)init
{
if (self=[superinit]) {
NSLog(@"来了一个顾客");
Customer *aCustomer = [[Customeralloc]
init];//来了一个顾客
aCustomer.delegate =
self;//顾客选定厨师 (这里就是委托)
[aCustomer prepareEatFood];//顾客准备点餐
[aCustomer release];//顾客吃完后离开餐馆
}
return
self;
}
//...........// 执行的方法
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用中UISearchDisplayController搜索效果的用法
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- Objective-C的内省(Introspection)用法小结
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- iOS推送的那些事