OC -- 类的类目 , 延展 , 协议

类目

分两部分:

1.系统已经写好的类目:按照功能对系统的类方法进行区分.

类目从@interface开始,后面是当前类名字,类名后是分类的功能, 到@end结束.

2.我们创建的类目,一般是为了把系统的类进行扩充.

对系统的类(例:NSString)添加文件Objective-C File {File:StringMethod; File Type:Category; Class: NSString}后,会自动出现@interface NSString (StringMethod).文件名为:NSString+StringMethod.

@interface NSString (StringMethod)

@end

延展

为自己写的类添加类目.

延展以@interface开头,然后写当前延展的类名,类名后加一个(),到@end结束.

一般延展会写在自己写的类的.m文件中,把一些不想让外部调用的属性放在延展里,这样这条属性就只能在类的内部使用,外部使用不了,尽最大可能保护当前类的安全.

类目一般都是看不见.m的系统文件进行扩展,延展一般是针对自己的类进行操作.

类的.m文件:

// 这其中的name属性和create方法只能在自己类中使用.
@interface Student ()

@property(nonatomic, copy)NSString *name;

@end

@implementation Student

- (void)create{
    _name = @"你好";
    NSLog(@"%@",_name);
}

@end

协议

  1. 在类的.m中声明协议@protocol,协议名为 类名+Delegate ,然后写协议内容(分 必须实行(@required)和选择实行(@optional));

#import <Foundation/Foundation.h>

// 1.声明一份协议
//@protocol 协议关键词

@protocol Marry <NSObject>

// 协议内容:
// 协议方法的声明:分两种
//若未写明@.... 则是必须实现的方法.
// @optional 是可选择的

@required
- (void)earnMoney;

@optional
- (void)cook;

@end
  1. 设置代理人属性:

    在@interface …… : NSObject 中写

    @property(nonatomic, assign)id <协议名>delegate;

    // 写触发方法.

@interface Girl : NSObject

// 2.设置代理人的属性
@property(nonatomic,assign)id<Marry>delegate;

// 触发方法
- (void)getMarry;

@end
  1. 在类的.m中写代理人需要执行的内容.
#import "Girl.h"

@implementation Girl
//两个人结婚之后,协议才正式的生效.
- (void)getMarry
{
    //3. 让代理人去执行协议里的方法.
    [self.delegate earnMoney];
}

@end
  1. 在代理人.h中先引头文件,然后签订协议. NSObject<协议名>;

#import <Foundation/Foundation.h>

#import "Girl.h"

//4.引完头文件之后,boy需要签订协议
@interface Boy : NSObject<Marry>

@end
  1. 在main.m中确定代理人
#import <Foundation/Foundation.h>
#import "Boy.h"
#import "Girl.h"
int main(int argc, const char * argv[]) {

    // 创建两个小人

    Boy *boy = [[Boy alloc] init];
    Girl *girl = [[Girl alloc] init];

    // 5.设置代理人
    girl.delegate = boy;

    //7. 通过调用结婚的方法,来执行协议里的方法.
    [girl getMarry];

    return 0;
}
  1. 在代理人.m中写协议中需要实施的方法内容.
#import "Boy.h"

@implementation Boy

//6.实现协议方法earnMoney
- (void)earnMoney{
    NSLog(@"买买买");
}

@end

// 触发.

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 07:23:41

OC -- 类的类目 , 延展 , 协议的相关文章

类目 延展 协议

1.类目 类目就是为已存在的类添加新的方法.但是不能添加实例变量.比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现. 首先先建个类目 command+n 给什么类写类目下面就写那个类的名字 上面填的是给这个类添加的方法的名字 @interface NSMutableArray (Sort) //为NSMutableArray类添加Sort方法,Sort就是类目名,做到见名知意-(void)invert;//方法@end 实现部分 #import "NSMutableA

[objective-c] 03 - 类目 延展 协议

本章主要讲解OC语言特性 类目(Category) 延展(Extension) 协议(Protocol) 1.类目 OC语言中的类目机制只有一个作用:为任何一个类添加方法 现在我们创建一个Student类 @interface Student : NSObject @property(nonatomic,strong)NSString * name; @end @implementation @end 如果想为Student类添加一个方法,现在有两种方法 直接修改Student类的源码,声明一个

类目,延展,协议的基本概念

Catgory(类目/分类) 1.分类是给原有类添加方法,它只能添加方法,不能添加属性(成员变量) 2.分类中定义@property,只会生成setter/getter方法的声明,没有方法的实现以及私有变量. 3.分类中的方法不能和本类的方法名相同,否则会有警告,而且调用的时候会优先调用分类的方法,即覆盖本类的方法. 4.分类的方法和实现分开,一对多,1个.h文件对应多个.m文件,典型的分散实现: 延展(Extension) 1.延展为类创建私有方法,一个.m文件对应多个.h文件,分配权限时可以

【objective-c】类目 延展 协议

1.类目 类目就是为已存在的类添加新的方法.但是不能添加实例变量.比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现. Category的使用场景有那些呢:1.类包含了很多个方法实现,而这些方法需要不同团队的成员来实现2.当你在使用基础类库中的类时,你不想继承这些类而只想添加一些方法时. Category能实现上面的需求,当然也有使用Category是需要注意的问题: 1.Category可以访问原始类的实例变量,但不能添加实例变量,如果想添加变量,那就通过继承创建子类

Objective-C类目延展协议

一.类目:(Category) 是在原有类的基础之上添加方法,在使用的时候只需要用原有类实例化出来的对象即可: 实际开发中什么情况下使用类目? 已经封装好的类,(不希望再改变原有类) 团队里面分工开发一个模块的时候可以使用自己定义的方法: 二.延展:(Extension)的基本概念和用法: 在xcode4.3之前直接使用self 调用方法  那时候会报错,所以的用延展 就是在类中添加私有方法,延展中声明的方法在类的本身的@interface  类名()和它对应的@end之间实现: 类有时需要方法

OC教程3-类目延展协议

OC3-语言特性 本章主要讲解OC语言特性 类目(Category) 延展(Extension) 协议(Protocol) 1,类目 OC语言中的类目机制只有一个作用:为任何一个类添加方法 现在我们创建一个Student类 @interface Student : NSObject @property(nonatomic,strong)NSString * name; @end @implementation @end 如果想为Student类添加一个方法,现在有两种方法 直接修改Student

OC-类目延展协议

类目(Category) 延展(Extension) 协议(Protocol) 一.类目 OC语言中的类目机制只有一个作用:为任何一个类添加方法 注意: 1.不能在分类中添加属性,只能添加方法 2.如果再分类里面使用@property,那么它只能生成getter和setter的声明,没有实现 3.如在在分类中写了与本类同名的方法,优先调用分类里面的方法,所以在分类中定义类的时候,尽量避免和本类中的方法重名 4.在分类里面可以访问本类里面所定义的属性 我们为NSString类添加一个方法,实现字符

OC 类目、协议

类目:为现有的类添加新方法 1.需要添加该类的新方法,但是不能继承该类的情况下 类目使用需要注意的问题: 1.类目里面不能添加实例变量,但是类目可以声明属性,但必须实现set get 方法,在这两个实现方法里面依然不能使用自己添加的实例方法 2.类目里添加的方法不能和原类中的方法重名,否则会导致覆盖 3.一个类可以添加多个类目,但是类目名和方法名不能重复 4.类目中的方法可以成为原始类的一部分,和原始类方法级别相同,可以被子类继承 类目的创建与使用: File:是类目的名称 File Type:

类目 延展 单例 协议

//类目#import <Foundation/Foundation.h> //声明一个NSString的分栏 @interface NSString (compareValue) - (NSComparisonResult)compareValue:(NSString *)string; @end ---------------------------------- #import "NSString+compareValue.h" @implementation NSS