36,,
88,
89,
4开yun体育app官网网页登录入口,,
12
类别的用法方案是什么:
1。课程包含许多方法实现,这些方法需要由不同团队的成员实施。
2。当您在基类库中使用类时,您不想继承这些类,而只想添加一些方法。
类别可以意识到上述要求,当然,使用类别时也需要注意一些问题:
1。类别可以访问原始类的实例变量,但无法添加实例变量。如果要添加变量,则可以通过继承和创建子类实现它。
2。类别可以超载原始类的方法。不建议这样做kaiyun.ccm,因为这将覆盖原始类的方法。如果您真的想超载,那么它是通过继承和创建子类来完成的。
3。与普通接口的区别在于,只要您不调用类别实现文件中的实例方法,就无需实现所有声明的方法。
2。扩展
扩展的功能是定义您自己的私人方法。
表单与类别相同,也无需创建一个新文件。只需将文件放在类的界面中,将文件放在需要扩展的类的.m文件中。
#import "Student.h"
@interface Student (extension)//为Student类创建一个私有的方法text
-(void)text;
@end
@implementation Student
-(void)hello;
{
[self text];
}
-(void)text
{
NSLog(@"你好");
}
@end
当外界[学生你好]时,它将打印出“你好”。但是云开·全站体育app登录,文本方法不能在世界以外的地方调用,[学生文本]是错误的。您只能通过自我调用.m文件中的私有方法文本。隐藏的内部实现。
3。协议
(1)。该协议声明可以通过其他类实现的方法。协议本身将不会实施。
(2)。该协议不是类,而只是其他对象可以实现的接口。
定义协议:
#import
@protocol MarryProtocol //定义一个结婚协议,结婚协议也可以继承其它的协议。
@required //必须遵守的协议,在遵守MarryProtocol协议的类的.m文件中去实现里边的方法。
- (void)washClothes;
- (void)cook;
@optional //可选的协议
- (void)makeMoney;
@end
代理(授权)模型:您有自己的需求,但让其他人这样做。
定义男性课
#import
#import "RoomService.h"
@interface Men : NSObject
@property(nonatomic,retain)NSString * name;
@property(nonatomic,assign)id<MarryProtocol> mate;//定义一个代理
-(id)initWithName:(NSString *)name;
-(void)needEat;
@end
定义女性班
#import
#import "MarryProtocol"
@interfaceWomen : NSObject <MarryProtocol> //遵守协议
@property(nonatomic,retain)NSString * name;
-(id)initWithName:(NSString *)name;
@end
在男性实施中
-(void)needEat
{
[self.mate cook];
}
妇女实施有一种方法
-(void)cook
{
NSLog(%@"wonmen正在做饭");
}
在主要功能内部
men.mate = women;
[men needEat];
打印出来:温门正在烹饪
4。该协议也可以写在一类中,并且可以使用该协议来介绍类标头文件。

