//
// main.m
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

import "Gril.h"

import "NSString+SayHi.h"

import "Man.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {
    
   // 创建对象
    Gril *bg = [ Gril grilWithYanzhi:@"漂亮" tui:@"大长腿"];
    // 类中方法
    [bg zipai];
    // 类目方法
    [bg findBoyFriend];
    
    // 创建字符串
    NSString *str = @"随便";
    //调用字符串类目方法
    [str sayHi];
    
    
    /**
     * 类目的作用 扩展
     * 1.给系统的类(没有源代码的类/没有.m文件的类)添加新的方法
     * 2.任何一个类都可以添加类目
     * 3.使用类目名 划分方法种类
     */
/*-----------------<<<<<.0.>>>>>-------------*/
    /**
     * 类目的特点
     * 1.有一对.h和.m文件
     * 2.可以写在类的后面 或者 新建文件(类名 + 类目名)
     * 3.类目中的方法相当于添加在原类中 可以使用任意的成员变量和方法
     * 4.类目在不能添加成员变量 只能添加方法
     * 5.类目在的方法优先级更高 如果和原类方法重名 回覆盖原方法(尽量避免重名)
     **/
    


  // 创建对象
    Man *dawa = [[Man alloc] init];
    [dawa shuangFangLianJie];
    
    
    
    
}
return 0;

}



//
// Gril.h
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

@interface Gril : NSObject
@property (nonatomic, copy)
NSString *yanzhi;
@property (nonatomic, copy)
NSString *tui;
// 自定义初始化

  • (instancetype)initWithYanzhi:(NSString *)yanzhi

                           tui:(NSString *)tui;

    // 遍历构造器

  • (instancetype)grilWithYanzhi:(NSString *)yanzhi

                           tui:(NSString *)tui;

    /// 自拍

  • (void)zipai;

@end
// 类目 / 类别/ 分类 Category
// 关键字 类名 (类目名)
@interface Gril (BF)

// 类目中不能添加成员变量 只能添加方法

  • (void)findBoyFriend;
  • (void)zipai;
    @end

//
// Gril.m
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import "Gril.h"

// 延展/扩展 Extension
// 作用: 私有声明 管理私有的内容
// 关键字 类名 ()
@interface Gril ()
@property (nonatomic, copy)
NSString *name;
// 私有方法 -> 没有在.h声明的方法 称为私有方法
// 私有方法可以在延展中声明,或者不声明
// 如果声明 可以统一管理所有的私有方法

  • (void)prvalateMethod;

@end
@implementation Gril

pragma mark - dealloc

  • (void)dealloc
    {

    [_yanzhi release];
    [_tui release];
    [super dealloc];

    }

pragma mark - 自定义初始化

  • (instancetype)initWithYanzhi:(NSString )yanzhi tui:(NSString )tui
    {
    if (self) {

    self = [super init];
    self.yanzhi = yanzhi;
    self.tui = tui;

    }
    return self;
    }

pragma mark - 遍历构造器

  • (instancetype)grilWithYanzhi:(NSString )yanzhi tui:(NSString )tui
    {
    Gril *p = [[Gril alloc] initWithYanzhi:yanzhi tui:tui];
    return [p autorelease];
    }

pragma mark - 普通方法

  • (void)zipai
    {

    NSLog(@"自拍");

    }

// 扩展/延展

  • (void)prvalateMethod
    {

    NSLog(@"私有方法");

    }

@end

// 类目的实现
@implementation Gril (BF)

  • (void)findBoyFriend
    {

    // 类目中可以使用当前类的任意方法和成员变量
    NSLog(@"找男朋友");

    }

// 类目中方法优先级高于原类方法
// 当方法重名时 回覆盖原类方法

  • (void)zipai
    {

    NSLog(@"和男朋友自拍");

    }

@end



//
// FruitDelegate.h
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

// 正式协议
// 声明若干个方法(一套标准)
// 关键字 协议名 根协议
@protocol FruitDelegate <NSObject>
// 协议类型修饰
// 必须的 表示必须实现的方法 加required
@required
// 有价值

  • (void)hasVslue;
    // 可选的 可实现可不实现 optional

@optional
// 使人愉悦

  • (void)makeSomeoneHappy;
    @end


//
// Liulain.h
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

import "FruitDelegate.h"

// 签订协议 -> 具有了协议中的方法的声明
@interface Liulain : NSObject <FruitDelegate>

@end


//
// Liulain.m
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import "Liulain.h"

@implementation Liulain

  • (void)hasVslue
    {

    NSLog(@"有价值");

    }

@end



//
// Money.h
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

import "FruitDelegate.h"

@interface Money : NSObject<FruitDelegate>

@end


//
// Money.m
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import "Money.h"

@implementation Money

  • (void)hasVslue
    {

    NSLog(@"钱钱钱");

    }

  • (void)makeSomeoneHappy
    {

    NSLog(@"买买买");

    }

@end



//
// Man.h
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

import "Woman.h"

warning 代理模式4. 签订协议

@interface Man : NSObject <MarriageDelegate>

  • (void)shuangFangLianJie;
    @end

//
// Man.m
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import "Man.h"

@implementation Man

  • (void)shuangFangLianJie
    {

    Woman *shejing = [[Woman alloc] init];

warning 代理模式5. 设置代理人

shejing.delegate = self;
[shejing buybuybuy];

}

warning 代理模式6. 实现协议中声明的方法

  • (void)makeMoney
    {

    NSLog(@"卖肾");

    }

@end



//
// Woman.h
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

warning 代理模式1. 声明协议

// 非正式协议
@protocol MarriageDelegate <NSObject>
// 必须
@required
// 挣钱

  • (void)makeMoney;
  • (void)mustBeHuluwa;
  • (void)mustHasGrandPa;
  • (void)mustBeBigBrother;
    // 加分项

@optional

  • (void)touShangYouDianLv;
  • (void)geBiYouLaoWang;

@end

@interface Woman : NSObject

warning 代理模式2. 设置代理人属性

// 给签订协议的对象 设置一个角色 未婚夫
@property (nonatomic, assign) id <MarriageDelegate> delegate;

  • (void)buybuybuy;
    @end

//
// Woman.m
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import "Woman.h"

@implementation Woman
-(void)buybuybuy
{

warning 代理模式3. 让代理人调用协议方法

// 让未婚夫挣钱 自己买买买
[self.delegate makeMoney];
NSLog(@"买买买");

}
@end



//
// NSString+SayHi.h
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

@interface NSString (SayHi)

  • (void)sayHi;

@end


//
// NSString+SayHi.m
// OC_9 类的扩展
//
// Created by YIem on 15/12/4.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import "NSString+SayHi.h"

@implementation NSString (SayHi)

  • (void)sayHi
    {

    NSLog(@"Hello, World");

    }

@end