码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-07-25 18:27:04      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

类目

分两部分:
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

// 触发.

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

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

标签:

原文地址:http://blog.csdn.net/gao_zi/article/details/47058507

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!