OC高级(二)

Category:分类、类目,为已有的类添加方法,扩展一个类的功能。添加的方法成为原始类的一部分,能被子类继承。不能添加变量。

为没有源代码的类添加方法。

#import <Foundation/Foundation.h>
//NSString+Say.h文件
@interface NSString (Say)

+ (void)sayHi;

- (NSString *)addSomeString:(NSString *)str;

@end

#import "NSString+Say.h"
//NSString+Say.m文件
@implementation NSString (Say)

+ (void)sayHi
{
    NSLog(@"Hi");
}

- (NSString *)addSomeString:(NSString *)str
{
    return [self stringByAppendingString:str];
}

@end

Extension:延展,作用为管理类的私有接口。

面向对象编程也叫面向接口编程。

类中对外公开的方法叫接口,Extension的功能是管理内部使用的方法(私有方法)。

代码写在原始类的.m文件中。

#import "Person.h"

@interface Person ()//Extension延展
{
    NSInteger _age;//添加实例变量
}

- (void)sayHi;//帮助管理私有方法

@end

Protocol:协议,为一堆方法的声明,只有.h文件,接受协议的对象实现协议中定义的方法。

#import <Foundation/Foundation.h>

@protocol MyProtocol <NSObject>

@optional//可选实现

- (void)SayHi;

@required//必须实现(默认)

- (void)eat;

@end

@protocol YourProtocol <NSObject>

- (void)play;

@end
对象的.h文件签名,在.m文件中实现上面协议中的方法。
#import <Foundation/Foundation.h>

#import "MyProtocol.h"

@interface Person : NSObject <MyProtocol,YourProtocol>


@end

delegate设计模式:Protocol的核心使用场景是实现delegate设计模式。

首先建立一个协议DoProtocol.h

#import <Foundation/Foundation.h>

@protocol DoProtocol <NSObject>
    @required
- (void)makeMoney;

    @optional
- (void)doHomework;

@end
新建一个Gril类(女孩通过协议找一个男孩来实现方法)

#import <Foundation/Foundation.h>
#import "DoProtocol.h"
@interface Girl : NSObject
{
    NSString *_name;
    id<DoProtocol> _boyFriend;
}

- (id)boyFriend;

- (void)setBoyFriend:(id<DoProtocol>)boyFriend;

- (void)makeMoney;

- (void)doHomework;

- (instancetype)initWithName:(NSString *)name;

- (void)setName:(NSString *)name;

- (NSString *)name;
@end

#import "Girl.h"

@implementation Girl
- (instancetype)initWithName:(NSString *)name
{
    if (self = [super init]){
        _name = name;
    }
    return self;
}

- (void)setName:(NSString *)name
{
    _name = name;
}

- (NSString *)name
{
    return _name;
}

- (id)boyFriend
{
    return _boyFriend;
}

- (void)setBoyFriend:(id<DoProtocol>)boyFriend
{
    _boyFriend = boyFriend;
}

- (void)makeMoney
{
    [_boyFriend makeMoney];
}

- (void)doHomework
{
    [_boyFriend doHomework];
}
@end

一个遵守协议的Boy类

#import <Foundation/Foundation.h>
#import "DoProtocol.h"
@interface Boy : NSObject <DoProtocol>
{
    NSString *_name;
}

- (instancetype)initWithName:(NSString *)name;

- (void)setName:(NSString *)name;

- (NSString *)name;

- (void)makeMoney;

- (void)doHomework;

@end

#import "Boy.h"

@implementation Boy
- (instancetype)initWithName:(NSString *)name
{
    if (self = [super init]){
        _name = name;
    }
    return self;
}

- (void)setName:(NSString *)name
{
    _name = name;
}
- (NSString *)name
{
    return _name;
}

- (void)makeMoney
{
    NSLog(@"%@ Make Money...",_name);
}

- (void)doHomework
{
    NSLog(@"%@ Do Homework...",_name);
}
@end
main方法中调用

    Girl *g = [[Girl alloc]initWithName:@"小花"];
    Boy *boy = [[Boy alloc]initWithName:@"小柱"];
    [g setBoyFriend:boy];
    [g makeMoney];
    [g doHomework];

输出结果

2015-01-17 19:41:26.219 OC0116[3355:303] 小柱 Make Money...
2015-01-17 19:41:26.219 OC0116[3355:303] 小柱 Do Homework...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值